web-dev-qa-db-ja.com

show diff --exclude work?

特定のサブディレクトリを無視して2つのディレクトリツリーを比較するためにdiffを使用しようとしていますが、それを機能させることができません。これは私のファイル構造は次のようになります:

temp/
|-- d1/
    |-- f1.txt
    |-- ignoreme/
        |-- f2.txt
|-- d2/
    |-- f1.txt
    |-- ignoreme/
        |-- f2.txt

d1/ignoremeおよびd2/ignoremeの下にあるものをすべて無視するようにしようとしていますが、それはできません。

diff -qr --exclude=/home/ubuntu/temp/d1/ignoreme/ d1 d2
Files d1/ignoreme/f2.txt and d2/ignoreme/f2.txt differ

私も試しました

diff -qr --exclude=/home/ubuntu/temp/d1/ignoreme/* d1 d2

そして

diff -qr --exclude=/home/ubuntu/temp/d1/ignoreme/* --exclude=/home/ubuntu/temp/d2/ignoreme/* d1 d2

しかし、いつも同じ結果が得られます。これを機能させるにはどうすればよいですか?

9
d512

-xまたは--exclude GNU diffのオプションは、各ファイルとディレクトリの名前が照合されるファイル名グロビングパターンを取得します。パターンが特定の名前と一致する場合、その名前は比較から除外されます。

パターンはパス名ではなく、ファイルとディレクトリのベース名に適用されます。つまり、ignoremeディレクトリを除外するには、次のようにします。

diff -qr --exclude=ignoreme ...

これにより、ignoremeである他の名前も除外されます。

これは --excludeおよび--exclude-dirは、GNU grepマニュアルでこれをより詳しく説明していますが、grepを再帰的に実行すると、GNU grep で機能します。

GNU infodiffのドキュメントにそれが明記されています:

-x PATTERN
--exclude=PATTERN
ディレクトリを比較するときは、ベース名がPATTERNと一致するファイルとサブディレクトリを無視します。

13
Kusalananda