find を -exec とともに使用して、diff を呼び出すこともできます:
cd /destination/dir/1
find . -name *.xml -exec diff {} /destination/dir/2/{} \;
補完的な --include ... の欠如。
1 つの回避策として、含めたいファイル以外のすべてのファイルを含む除外ファイルを実行できます。 file1
を作成します 含めたい拡張子を持たないすべてのファイルを検索します sed
ファイル名をキャッチし、ちょうど :
diff --exclude-from=file1 PATH1/ PATH2/
例:
find PATH1/ -type f | grep --text -vP "php$|html$" | sed 's/.*\///' | sort -u > file1
diff PATH1/ PATH2/ -rq -X file1
man ページ (のバージョン) から取得:
-x PAT --exclude=PAT
Exclude files that match PAT.
-X FILE --exclude-from=FILE
Exclude files that match any pattern in FILE.
つまり、-x
のようになります。 報告するときは 1 つのパターンしか受け入れませんが、除外したいすべてのパターンをファイル (おそらく 1 行に 1 つ) に入れる場合は、次のように 2 番目のフラグを使用できます:
$ diff /destination/dir/1 /destination/dir/2 -r -X exclude.pats
ここで、exclude.pats は次のとおりです:
*.jpg
*.JPG
*.xml
*.XML
*.png
*.gif
-x
を指定できます
diff -x '*.foo' -x '*.bar' -x '*.baz' /destination/dir/1 /destination/dir/2
info diff
のディレクトリの比較セクションから (私のシステムでは、 info -f /usr/share/info/diff.info.gz
を実行する必要があります ):
ディレクトリの比較中に一部のファイルを無視するには、「-xPATTERN」または「--exclude=PATTERN」オプションを使用します。このオプションは、ベース名がシェル パターン PATTERN と一致するファイルまたはサブディレクトリを無視します。シェルとは異なり、ファイル名のベースの先頭にあるピリオドは、パターンの先頭にあるワイルドカードと一致します。シェルが展開しないように、PATTERN を引用符で囲む必要があります。たとえば、オプション -x '*.[ao]' 名前が「.a」または「.o」で終わるファイルは無視されます。
このオプションは、複数回指定すると累積されます。たとえば、オプション -x 'RCS' -x '*,v' を使用すると、 ベース名が「RCS」または「,v」で終わるファイルまたはサブディレクトリは無視されます。