J'ai deux répertoires avec la même liste de fichiers. J'ai besoin de comparer tous les fichiers présents dans les deux répertoires à l'aide de la diff
commande. Existe-t-il une option de ligne de commande simple pour le faire, ou dois-je écrire un script shell pour obtenir la liste des fichiers, puis les parcourir?
303
diff
commande en téléchargeant les utilitaires GNU pour Win32 .-b
ignore les changements d'espaces et-u
donne 3 lignes de tampon.diff -rub folder1/ folder2/
-bur
qu'il serait facile de se souvenir si vous viviez dans un climat froid.Si vous ne souhaitez voir que les fichiers qui diffèrent, vous pouvez utiliser:
L'option "q" n'affichera que les fichiers qui diffèrent mais pas le contenu qui diffère, et "trier" organisera la sortie par ordre alphabétique.
la source
diff
de chaque paire de fichiers différents. Son approche serait extrêmement différente si un ou deux fichiers seulement différaient si des dizaines de fichiers différaient. Je pourrais me perdre dans la sortiediff
en ingérant des dizaines de fichiers à la fois!-x PATTERN
dans la commande pour exclure certains sous-répertoires. Par exemple,diff -qr repo1 repo2 -x ".git"
comparera deux répertoires (repo1 et repo2) mais exclura les fichiers du dossier .git des répertoires respectifs.Diff a une option
-r
qui est censée faire exactement cela.diff -r dir1 dir2
la source
diff
peut non seulement comparer deux fichiers, il peut, en utilisant l'-r
option, parcourir des arborescences de répertoires entières, en vérifiant récursivement les différences entre les sous-répertoires et les fichiers qui se produisent à des points comparables dans chaque arborescence.la source
S'il s'agit de diff GNU, vous devriez simplement pouvoir le pointer vers les deux répertoires et utiliser l'option -r.
Sinon, essayez d'utiliser
NB Comme l'a souligné Dennis dans la section commentaires, vous n'avez pas vraiment besoin de faire la substitution de commande sur le ls. Je fais cela depuis si longtemps que je le fais à peu près sur le pilote automatique et que je remplace la commande dont j'ai besoin pour obtenir ma liste de fichiers à comparer.
J'ai également oublié d'ajouter que je fais '\ ls' pour désactiver temporairement mon alias de ls vers GNU ls afin de perdre les informations de formatage des couleurs de la liste renvoyée par GNU ls.
la source
ls
:for i in ./dir1/*
Voici un script pour montrer les différences entre les fichiers dans deux dossiers. Cela fonctionne récursivement. Modifiez dir1 et dir2.
la source
Si vous ne souhaitez pas spécifiquement comparer le contenu des fichiers et ne vérifier que celui qui n'est pas présent dans les deux répertoires, vous pouvez comparer les listes de fichiers, générées par une autre commande.
-printf '%P\n'
indiquefind
de ne pas préfixer les chemins de sortie avec le répertoire racine.J'ai également ajouté
sort
pour m'assurer que l'ordre des fichiers sera le même dans les deux appels defind
.À
grep
la fin, les informations sur les lignes d'entrée identiques sont supprimées.la source
Essaye ça:
la source