Můžete také použít find s -exec pro volání diff:
cd /destination/dir/1
find . -name *.xml -exec diff {} /destination/dir/2/{} \;
Absence komplementárního -- include ... .
Můžeme udělat jedno řešení, soubor vyloučení se všemi soubory, ale to, co chceme zahrnout. Takže vytvoříme file1
s najít všechny soubory, které nemají přípony, které chceme zahrnout, sed
zachytit název souboru a je jen :
diff --exclude-from=file1 PATH1/ PATH2/
Například:
find PATH1/ -type f | grep --text -vP "php$|html$" | sed 's/.*\///' | sort -u > file1
diff PATH1/ PATH2/ -rq -X file1
Převzato z (verze) manuálové stránky:
-x PAT --exclude=PAT
Exclude files that match PAT.
-X FILE --exclude-from=FILE
Exclude files that match any pattern in FILE.
Takže to vypadá jako -x
při nahlášení přijímá pouze jeden vzor, ale pokud vložíte všechny vzory, které chcete vyloučit, do souboru (pravděpodobně jeden na řádek), můžete použít druhý příznak takto:
$ diff /destination/dir/1 /destination/dir/2 -r -X exclude.pats
kde exclude.pats je:
*.jpg
*.JPG
*.xml
*.XML
*.png
*.gif
Můžete zadat -x
více než jednou.
diff -x '*.foo' -x '*.bar' -x '*.baz' /destination/dir/1 /destination/dir/2
Ze sekce Porovnání adresářů info diff
(v mém systému musím provést info -f /usr/share/info/diff.info.gz
):
Chcete-li některé soubory při porovnávání adresářů ignorovat, použijte volbu '-xPATTERN' nebo '--exclude=PATTERN'. Tato volba ignoruje všechny soubory nebo podadresáře, jejichž základní názvy odpovídají vzoru shellu PATTERN. Na rozdíl od shellu se tečka na začátku základny názvu souboru shoduje se zástupným znakem na začátku vzoru. PATTERN byste měli uzavřít do uvozovek, aby jej shell nerozšiřoval. Například možnost -x '*.[ao]' ignoruje všechny soubory, jejichž název končí na '.a' nebo '.o'.
Tato možnost se shromažďuje, pokud ji zadáte více než jednou. Například pomocí možností -x 'RCS' -x '*,v' ignoruje jakýkoli soubor nebo podadresář, jehož základní název je „RCS“ nebo končí „,v“.