J'utilise diff -r a b
pour comparer récursivement les répertoires a et b . Il arrive souvent que qu'il ya des liens cassés (les mêmes liens cassés à la fois un et b répertoires et pointant vers les mêmes cibles, non-existants).
diff émet ensuite des messages d'erreur pour ces cas et les sorties avec un code de sortie non nul, mais j'aimerais qu'il reste silencieux et quitte avec 0 car les répertoires sont les mêmes dans mon livre.
Comment puis je faire ça?
Réponses:
Pour la version 3.3 ou ultérieure de
diff
, vous devriez utiliser l'--no-dereference
option, comme décrit dans la réponse de Pete Harlan .Malheureusement, les anciennes versions de
diff
ne permettent pas d'ignorer les liens symboliques :Si tout ce que vous voulez, c'est vérifier un rsync (et probablement réparer ce qui manque), vous pouvez alors exécuter la commande rsync une seconde fois. Si vous ne voulez pas faire cela, alors sommer le répertoire peut être suffisant.
Si vous voulez vraiment faire cela avec
diff
, alors vous pouvez utiliserfind
pour ignorer les liens symboliques et exécuter diff sur chaque fichier individuellement. Passez vos annuaires un et b en arguments:ou comme one-liner:
Ceci identifiera les fichiers dont le contenu diffère ou ceux qui se trouvent dans un répertoire. mais pas dans b .
Notez que:
rsync
scénario.la source
for f in
trouver un / *! -type l;do echo $f b/${f#*/};done
. Cependant, je n'ai pas le temps de tester cela maintenant. Faites-moi savoir si cela fonctionne.$(xxx)
au lieu de backticks. La symétrie des backticks les rend moins lisibles et empêche leur imbrication. En ce qui concerne 1 et 2, voir stackoverflow.com/questions/11366184/…Depuis la version 3.3, GNU
diff
ne prend pas en charge le déréférencement des liens symboliques, mais compare ensuite les chemins qu’ils pointent.Installez GNU
diffutils
> = 3.3 et utilisez l’--no-dereference
option; il n'y a pas d'option courte pour cela.Le diagnostic sera muet si égal ou:
Liens symboliques
/tmp/noderef/a/symlink
et/tmp/noderef/b/symlink
différerla source
Vous pouvez utiliser une version plus récente de
diff
La
diff
GNUdiffutils
3.3 inclut une--no-dereference
option qui vous permet de comparer les liens symboliques eux - mêmes plutôt que leurs objectifs. Il signale s’ils diffèrent, reste silencieux s’ils sont d’accord et ne se soucie pas de savoir s’ils sont brisés.Je ne sais pas quand l'option a été ajoutée. ce n'est pas présent dans 2.8.1.
la source