diff d'un répertoire de façon récursive, en ignorant tous les fichiers binaires
De travail sur une Fedora Constantine boîte. Je suis à la recherche d' diff
deux répertoires de manière récursive pour vérifier la source de changements. En raison de la configuration du projet (avant mon propre engagement avec ledit projet! soupir), les répertoires contiennent à la fois source et les binaires, ainsi que de grands ensembles de données binaires. Tandis que la comparaison fonctionne éventuellement sur ces répertoires, il faudrait peut-être vingt secondes si je pouvais ignorer les fichiers binaires.
Comme je le comprends, diff ne dispose pas d'un 'ignorer fichier binaire" mode, mais ne disposent d'ignorer un argument qui ignore expression régulière dans un fichier. Je ne sais pas quoi écrire là pour ignorer les fichiers binaires, quelle que soit l'extension.
Je suis à l'aide de la commande suivante, mais il n'ignore pas les fichiers binaires. Quelqu'un sait-il comment modifier cette commande pour faire cela?
diff -rq dir1 dir2
- Essayez d'utiliser
cmp
au lieu dediff
, ne sera pas ignorer les fichiers binaires, mais devrait être plus rapide - Merci pour l'astuce.
- à la semaine précédente. c'est l'affiche-enfant justification de commande de la source. si vous ne l'utilisez pas, vous devriez être. si la décision n'est pas dans vos mains, vous devez défendre avec passion. votre problème disparaîtrait avec une bonne installation de git...
- Oh, croyez-moi. Je sais. Je suis en train de faire la recherche au premier cycle et ce n'est pas tout à fait de l'installation de la façon dont il devrait être. Croyez-moi. JE SAIS. CVS/SVN/GIT résoudre ce problème. Savoir ce qui est pire que ça? J'ai été chargé de travailler sur un projet Fortran avec peu ou pas de documentation. Il y a 8 versions du projet dans ce répertoire, et chacun a différentes makefiles (ou presque ;)) faire la même chose. Croyez-moi, je suis disputer avec mon surveillant ainsi que je le peux.
Vous devez vous connecter pour publier un commentaire.
Peut-être utiliser
grep -I
(ce qui est équivalent àgrep --binary-files=without-match
) comme un filtre pour trier les fichiers binaires.IFS=$'\n'
?De la triche, mais voici ce que j'ai utilisé:
Ce de manière récursive compare dir1 dir2, sed supprime les lignes pour les fichiers binaires(commence par "fichiers Binaires "), il est redirigé vers le outputfile.
-x
drapeau. Essayezdiff -r -x '*.xml' dir1 dir2
Aussi,man diff
pour plus d'info.Binary\ files\
avec le mot approprié dans votre langue. Il devrait être le premier d'un ou deux mots. En allemand saBinärdateien\
-x
est également reproductible, si vous voulez exclure les plusieurs modèles. Quelque chose comme-x '*.ext1' -x '*.ext2' -x 'ext3'
.Je suis venu à cette (vieille) question la recherche de quelque chose de similaire (fichiers de configuration sur un héritage serveur de production par rapport à défaut, l'installation d'apache). Suivant @fearlesstost de la suggestion dans les commentaires,
git
est suffisamment léger et rapide qu'il est probablement plus simple que l'une des suggestions ci-dessus. Copie version1 vers un nouveau répertoire. Alors:Maintenant supprimer tous les fichiers de la version 1 de ce répertoire et copier la version 2 dans le répertoire. Maintenant faire:
Cela va vous montrer Git version de toutes les différences entre le premier commit et la seconde. Pour les fichiers binaires, il va juste dire qu'ils diffèrent. Alternativement, vous pouvez créer une branche pour chaque version et essayer de les fusionner à l'aide de git de la fusion des outils.
git diff folder1 folder2
...Si les noms des fichiers binaires dans votre projet de suivre un modèle spécifique (
*.o
,*.so
, ...) comme ils le font habituellement, vous pouvez mettre ces modèles dans un fichier et de le spécifier à l'aide-X
(trait d'union X).Contenu de mon
exclude_file
Commande:
Mise à JOUR:
-x
peut être utilisé à la place de-X
, pour spécifier l'exclusion des motifs sur la ligne de commande plutôt que dans un fichier:-x
est pour l'exclusion d'un motif sur la ligne de commande, alors que-X
indique que le fichier contenant tous les modèles doivent être exclus.Utiliser une combinaison de
find
et lafile
de commande. Cela vous oblige à faire quelques recherches sur la sortie de lafile
commande dans votre répertoire; ci-dessous, je suis en supposant que les fichiers que vous souhaitez diff est signalé comme ascii. OU, utilisezgrep -v
pour filtrer les fichiers binaires.Puisque vous le savez probablement les noms de l'énorme binaires, les placer dans une table de hachage de tableau et ne faire que la diff quand un fichier n'est pas dans la table de hachage,quelque chose comme ceci:
Eh bien, comme un brut sorte de vérifier, vous pouvez ignorer les fichiers qui correspondent à /\0/.
-x
indicateur peut être utilisé pour ignorer les fichiers.