ディレクトリの一覧表示は機能するはずです。たとえば、スクリプトで使用したものは次のとおりです (gnu diff を想定)。
diff -r \
--exclude="*~" \
--exclude=".svn" \
--exclude=".git" \
--exclude="*.zip*" \
--exclude="*.gz" \
--exclude="*.tar" \
...etc
... .svn
の内容を無視します と .git
ディレクトリだけでなく、*.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」という名前のディレクトリが除外され、それ以外はすべて diff されます。 (単純な "-name b
の代わりに " "-regex '.*/b'
も使用できます " - 注、末尾に "/" はありません。)
同じ問題があったので、diff
へのパッチを作成しました .パッチはまだ承認されていませんが、独自のバージョンの diff
をビルドできます パッチを使用するか、AUR パッケージを使用して Arch Linux にインストールしてください。
これが diff
です パッチ。
ディレクトリ directory/sub-directory
を除外するには 、私は使用します
diff -r <src-dir> <dest-dir> | grep -v directory/sub-directory
ただし、単一の除外では機能するはずですが、長い無視リストでは使用できないはずです。