Sous Linux, on peut utiliser la commande diff
pour vérifier les différences de fichiers. Je l'utilise pour vérifier les différences entre deux modules, tous deux copiés sur /tmp
.
Cependant, les deux modules ont des liens symboliques, qui peuvent ne pas pointer vers le fichier correct, car les modules ont été copiés dans le /tmp
répertoire. Mais cela n'a pas d'importance. Ce que je veux vérifier, c'est si les liens symboliques sont les mêmes.
Par exemple, dans un module, le lien symbolique lit
/home/test/file1
et dans l'autre le lien symbolique se lit comme suit:
/etc/rc.d/whatever
diff
lance maintenant une erreur car - en général - il ne peut pas trouver le fichier. Mais je veux diff
dire: "Hé, ces liens symboliques ne sont pas les mêmes", que les liens pointent vers des fichiers valides ou non.
Question: Comment est-il possible diff
de faire cela, c'est-à-dire de ne pas essayer de suivre les liens, mais de différencier les liens eux-mêmes?
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 vers lesquels ils pointent.
Installez GNU diffutils> = 3.3 et utilisez l'option '--no-dereference'; il n'y a pas d'option courte pour cela.
Le diagnostic sera silencieux si les chemins sont égaux, ou:
si les chemins diffèrent.
la source
Avec les outils GNU:
À strictement parler, cela ne peut pas faire la différence entre un lien symbolique appelé
a
qui pointe versb -> c
et celui appeléa -> b
qui pointe versc
, sans parler des problèmes avec les noms de fichiers contenant des caractères de nouvelle ligne, mais cela rend la sortie plus lisible que la plus robuste:Là, nous utilisons
//
comme séparateur (qui ne peut pas se produire autrement dans la sortie defind
for%p
) et convertissons les caractères de nouvelle ligne en caractères NUL (qui ne peuvent pas se produire dans l'expansion de%p
nor%l
).la source
Si je comprends bien, vous voulez vérifier que les liens symboliques pointent vers la même destination théorique, ou que si l'un n'est pas un lien symbolique, l'autre fichier est lié au même fichier. Cela devrait faire ce que vous voulez:
la source
-m
, non-f
. Merci!-m
plus./home/test/file1
est un lien symbolique vers/etc/rc.d/whatever
, ou ils sont tous les deux un lien symbolique/
, il signale qu'ils sont les mêmes. Je pense que l'OP veut voir la différence dans le "chemin" stocké dans le lien symbolique, pas s'ils se résolvent dans le même fichier (pour lequel vous l'avez[[ a -ef b ]]
).