Si je veux trouver les différences entre deux arborescences de répertoires, j'exécute généralement simplement:
diff -r dir1/ dir2/
Cela génère exactement les différences entre les fichiers correspondants. Je souhaite simplement obtenir une liste des fichiers correspondants dont le contenu diffère. J'ai supposé que ce serait simplement une question de passer une option de ligne de commande à diff
, mais je n'ai rien trouvé sur la page de manuel.
Aucune suggestion?
dircmp
commande sur unix (pas linux)Réponses:
Vous avez dit Linux, alors vous avez de la chance (au moins, il devrait être disponible, vous ne savez pas quand il a été ajouté):
Devrait faire ce dont vous avez besoin.
Si vous souhaitez également voir les différences pour les fichiers qui peuvent ne pas exister dans l'un ou l'autre répertoire:
la source
diff -qr dir1/ dir2/
et ma version étendue àdiff -qr dir1/ dir2/ | grep ' differ'
--brief
pour son raccourci-q
.--brief
.-brief
est interprété comme-b -r -i -e -f
, en d'autres termes, comme un ensemble de drapeaux et non comme une seule option.La commande que j'utilise est:
C'est exactement le même que celui de Mark :) Mais sa réponse m'a dérangé car il utilise différents types de drapeaux, et cela m'a fait regarder deux fois. En utilisant les drapeaux les plus verbeux de Mark, ce serait:
Je m'excuse d'avoir posté lorsque l'autre réponse est parfaitement acceptable. Je ne pouvais pas m'empêcher ... de travailler pour être moins pédant.
la source
q
stand? Est-ce une abréviation de quelque chose? Je ne trouve aucune logique derrière leq
..q
c'est pourquiet
, ce qui signifie généralement moins verbeux.J'aime utiliser
git diff --no-index dir1/ dir2/
, car il peut montrer les différences de couleur (si cette option est définie dans votre configuration git) et parce qu'il montre toutes les différences dans une sortie paginée longue en utilisant "moins".la source
--no-index
plus sur stackoverflow.com/a/1792477/473390 . J'ai mis à jour la réponse @ alan-porter.--name-status
à la ligne de commande, il affichera simplement la liste des noms de fichiers avec des drapeaux "M / A / D" pour le statut Modifié / Ajouté / Supprimé.Ces deux commandes font essentiellement la chose demandée:
Le choix entre eux dépend de l'emplacement de dir1 et dir2:
Lorsque les répertoires résident sur deux lecteurs séparés, diff surpasse rsync. Mais lorsque les deux répertoires comparés se trouvent sur le même lecteur, rsync est plus rapide. C'est parce que diff met une charge presque égale sur les deux répertoires en parallèle, maximisant la charge sur les deux disques.
rsync calcule les sommes de contrôle en gros morceaux avant de réellement les comparer. Cela regroupe les opérations d'E / S en gros morceaux et conduit à un traitement plus efficace lorsque les choses se déroulent sur un seul disque.
la source
rsync --options /usr /bin /var /sbin /lib /old_root
, comparera efficacement la racine actuelle/
(en spécifiant tous les sous-répertoires) et/old_root
(contenant par exemple une sauvegarde plus ancienne de/
), ce qui est quelque chose quidiff -r
peut ne fais pas. Et si vous supposez que les fichiers de même taille, d'autorisations et d'horodatages n'ont probablement pas changé, le fait de laisser de côté--checksum
vous fournira une vérification extrêmement rapide (si ce n'est pas le cas) des fichiers qui ont pu être modifiés.--delete
avecrsync
?--dry-run
drapeau) rien n'est vraiment supprimé,rsync
imprime uniquement les fichiers qui sont en dir1 mais pas en dir2--dry-run
toujours le premier pour ne pas l'oublier accidentellement.Meld est également un excellent outil pour comparer deux répertoires:
meld dir1/ dir2/
Meld propose de nombreuses options pour comparer des fichiers ou des répertoires. Si deux fichiers diffèrent, il est facile d'entrer en mode de comparaison de fichiers et de voir les différences exactes.
la source
meld
devient horriblement lent si utilisé sur de grands répertoires. Y a-t-il quelque chose qui gère mieux les grands répertoires?find dir1 dir2 | cut -d/ -f2- | sort | uniq --unique
meld <(find dir1 -ls ) <(find dir2 -ls)
fonctionne assez bien, en utilisant la substitution de processus bash. (zsh=(command)
fonctionne encore mieux.)'Billings', compatriote de la chaîne (de renommée freenode / # centos) a partagé sa méthode avec moi:
L'inclusion de la barre oblique finale du répertoire n'a pas d'importance.
Il semble également que
-u
option ne soit pas disponible sur certaines versions plus anciennes / serveur de diff.La différence de diffs:
la source
--new-file/-N
qui fait que diff considère que les fichiers manquants sont vides et--text/-a
qui le fait considérer toutes les entrées binaires comme du texte. Je ne vois pas les avantages de ce cas d'utilisation particulier.Diffoscope est un excellent outil de annuaire basé sur la ligne de commande.
J'aime particulièrement le fait qu'il puisse différer en fichiers:
Il vous indiquera non seulement quels fichiers diffèrent, mais aussi comment ils diffèrent.
la source
Pour trouver diff, utilisez cette commande:
-r diffère également tous les sous-répertoires -q indique à diff de ne signaler que lorsque les fichiers diffèrent.
--brief montrera les fichiers qui existent dans le répertoire.
Ou sinon
nous pouvons utiliser Meld qui montrera dans la fenêtre graphique qu'il est facile de trouver la différence.
la source
--brief
et-q
sont la même option. Votre déclaration donne l'impression qu'ils sont différents, mais ils ne le sont pas.Vous pouvez également utiliser
Rsync
etfind
. Pourfind
:Mais les fichiers avec les mêmes noms et dans les mêmes sous-dossiers, mais avec un contenu différent, ne seront pas affichés dans les listes.
Si vous êtes un fan de GUI, vous pouvez vérifier Meld que @Alexander a mentionné. Cela fonctionne très bien sous Windows et Linux.
la source
Pour signaler les différences entre dirA et dirB, tout en mettant à jour / synchroniser.
rsync -auv <dirA> <dirB>
la source