Forum Programmation.shell diff et les liens symboliques

Posté par (page perso) .
Tags : aucun
1
18
oct.
2009
Problème du jour : diff tente de suivre les liens plutôt que de simplement les comparer. Et lorsque les liens pointent dans le vide, diff retourne un code d'erreur
$ ln -s nonexistant link
$ diff link link && echo identiques
diff: link: No such file or directory
diff: link: No such file or directory

Je cherche donc un moyen de comparer deux répertoires contenant potentiellement des liens invalides
  • # en gardant diff

    Posté par . Évalué à 3.

    Si tu veux vérifier que les liens symboliques pointent bien vers les mêmes fichiers (même si les destinations n'existent pas), il faut une étape supplémentaire : appeler "find dossier1 -type l -printf '%P -> %l\n' " pour déterminer les cibles de tous les liens symboliques, puis comparer les sorties des find.

    Ensuite, si tu veux comparer les fichiers existants, et ignorer quand un lien n'existe pas, tu ne dois pas utiliser le code de retour de diff, mais regarder sa sortie, et vérifier qu'elle ne contient aucune ligne, en dehors des messages d'erreurs pour les liens symboliques :
    diff -qr dossier1 dossier2 2>/dev/null | grep -qm1 ""
    $? vaut 1 s'il n'y a pas de différences, et 0 s'il y en a.
    (grep -m1 "" va retourner si au moins une ligne rentre, ou si à l'inverse aucune n'est entrée)
    • [^] # Re: en gardant diff

      Posté par (page perso) . Évalué à 2.

      Merci pour ta réponse.
      Dommage qu'il n'existe pas de moyen plus direct…
      • [^] # Re: en gardant diff

        Posté par . Évalué à 4.

        ca depend ce que tu recherches comme differences

        diff est prevu pour comparer le contenu de fichier
        il peut faire du recurise avec l'option -r et donc te lister les fichiers manquants ou changés dans deux dossiers

        mais il y a des outils pour comparer des repertoires en tenant compte des liens existants ou absents

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.