ディレクトリのリストは機能するはずです。たとえば、スクリプトで使用したもの(gnu diffを想定)、
diff -r \
--exclude="*~" \
--exclude=".svn" \
--exclude=".git" \
--exclude="*.zip*" \
--exclude="*.gz" \
--exclude="*.tar" \
...etc
... .svn
および.git
dirsの内容を無視しますが、*.zip
/ *.gz
/ etc という名前の個々のファイルも無視します。
編集:フォームのフィルタパスするためにはdir_a/file1
依然としてdiff
同じ基本名を持つファイル、などdir_b/file1
またはdir_a/b/file1
、その後するファイルのリストdiff
(使用、例えば、生成されなければならないfind
)、及びこれらのパスに由来比較するファイル。例えば、与えられた
$ find ONE TWO -type f -print
ONE/a/1.txt
ONE/a/2.txt
ONE/a/b/2.txt
TWO/a/1.txt
TWO/a/2.txt
TWO/a/b/2.txt
比較するファイルのリストを生成し*/a/2.txt
ます2.txt
。たとえば、除外しますが、という名前の他のファイルを比較します。を除くすべてのファイルを「検索」するだけですONE/a/2.txt
(正規表現はのようにここでも使用できます.*/a/2.txt
)。
$ find ONE -type f \( ! -regex 'ONE/a/2.txt' \) \
-exec bash -c 'diff -q "${1}" "${2/ONE/TWO}"' - {} {} \;
これは実際には無視ONE/a/2.txt
(およびTWO/a/2.txt
)しますが、次の名前のファイルを比較します2.txt
:
diff -q ONE/a/1.txt TWO/a/1.txt
diff -q ONE/a/b/2.txt TWO/a/b/2.txt
編集:それとも、ともっと楽しいfind
(追加の楽しみは、読者の練習として残し)、ファイルまたはディレクトリを選択除外して、diff
他のすべて:
$ find ONE \( -regex 'ONE/a/2.txt' -o -name b -prune \) \
-o -type f -exec bash -c 'echo diff -q "${1}" "${2/ONE/TWO}"' - {} {} \
上記の例では、特定のファイル「{top} /a/2.txt」、「b」という名前のディレクトリ、および他のすべてが差分になっています。(単純な「-name b
」の代わりに、「」を使用することもできます-regex '.*/b'
-注、末尾の「/」はありません。)
diff
の--exclude
オプションであるくだらないので...