2017-05-24 3 views
1

C'est mon arbreUtilisez diff et ignorer les répertoires vides

├── test 
│   ├── dir1 
│   └── dir2 
│    ├── file 
│    └── file2 
└── test2 
    └── dir2 
     ├── file 
     └── file2 

J'utilise diff: diff -r test/ test2/

Only in test: dir1 

La seule différence est qu'il ya un répertoire vide (dir1) dans de test/ qui n'existe pas dans test2/.

Je veux ignorer les répertoires vides comme différence. Donc, je veux dans ce cas que diff me dit que le contenu de test/ est le même que le contenu de test2/

Comment puis-je y parvenir?

Répondre

1

J'ai trouvé une façon de le faire mais je ne suis pas vraiment content.

diff peut être dit d'exclure les fichiers correspondant à un motif. Malheureusement, le modèle ne fonctionne que sur le nom de fichier, donc ma solution peut exclure plus de répertoires (et de fichiers) que prévu.

Ici, il est, FWIW:

diff $(find test -empty -type d -exec sh -c 'echo -n "-x $(basename $1) "' _ {} \;) -r test/ test2/ 

j'ai ajouté la commande suivante

find test -empty -type d -exec sh -c 'echo -n "-x $(basename $1) "' _ {} \;) 

qui sort le nom de base de chaque vide dir précédent par diff « s exclure l'option -x. Avec votre arbre d'exemple, il afficherait: -x dir1