web-dev-qa-db-fra.com

show diff --exclude fonctionne-t-il?

J'essaie d'utiliser diff pour comparer deux arborescences de répertoires tout en ignorant certains sous-répertoires, mais je ne parviens pas à le faire fonctionner. Voici à quoi ressemble ma structure de fichiers:

temp/
|-- d1/
    |-- f1.txt
    |-- ignoreme/
        |-- f2.txt
|-- d2/
    |-- f1.txt
    |-- ignoreme/
        |-- f2.txt

J'essaie de le faire ignorer quoi que ce soit sous d1/ignoreme et d2/ignoreme, mais il ne le fera pas.

diff -qr --exclude=/home/ubuntu/temp/d1/ignoreme/ d1 d2
Files d1/ignoreme/f2.txt and d2/ignoreme/f2.txt differ

J'ai aussi essayé

diff -qr --exclude=/home/ubuntu/temp/d1/ignoreme/* d1 d2

et

diff -qr --exclude=/home/ubuntu/temp/d1/ignoreme/* --exclude=/home/ubuntu/temp/d2/ignoreme/* d1 d2

mais j'obtiens toujours le même résultat. Comment puis-je faire fonctionner cela?

9
d512

Le -x ou --exclude options pour GNU diff prendre un modèle de globbing de nom de fichier auquel le nom de chaque fichier et répertoire sera comparé. Si le modèle correspond à un nom particulier, ce nom est exclu de comparaison.

Le modèle est appliqué au nom de base des fichiers et répertoires, pas aux noms de chemin, ce qui signifie que pour exclure votre répertoire ignoreme, vous utiliseriez

diff -qr --exclude=ignoreme ...

Cela exclurait également tout autre nom qui se trouve être ignoreme.

Ceci est similaire à la façon dont --exclude et --exclude-dir fonctionne dans GNU grep lors de l'exécution de grep récursivement, bien que le GNU grep le manuel l'explique mieux.

La documentation de info pour GNU diff l'explique:

-x PATTERN
--exclude=PATTERN
Lorsque vous comparez des répertoires, ignorez les fichiers et sous-répertoires dont les noms de base correspondent à PATTERN.

13
Kusalananda