25

2 つのディレクトリ (a と b) にあるファイルの再帰的な差分を実行するにはどうすればよいですか。

$ diff -r a b

ただし、名前が特定のパターンに一致するファイルのみを調べます。たとえば、find コマンドで使用できるのと同じ構文を使用すると、次のようになります。

$ diff -r a b -name "*crazy*"

これは、名前に「クレイジー」が含まれる、aとbの同じ名前とパスを持つファイル間の差分を表示します。

事実上、diff で利用可能な --exclude オプションの反対を探しています。

4

2 に答える 2

19

おそらくこれは少し間接的ですが、機能するはずです。パターンに一致しないfindファイルのリストを取得し、それらのファイルをすべて「除外」するために使用できます。

find a b -type f ! -name 'crazy' -printf '%f\n' | diff -r a b -X -

はstdinからパターン-X -diff読み取り、一致するものをすべて除外します。*これは、ファイル?に名前のような面白い文字が含まれていない場合に機能するはずです。唯一の欠点は、差分にfindコマンドが含まれないことです。そのため、リストされているdiffコマンドはそれほど有用ではありません。

(私はGNUfindとでのみテストしましたdiff)。

編集

非GNUだけfindが持っていないので-printfsed代わりに使用することができます:

find a b -type f ! -name '*crazy*' -print | sed -e 's|.*/||' | diff -X - -r a b

それはまた、私が知らない非GNUdiffが持っていることを前提とし-Xています。

于 2012-04-12T22:08:08.423 に答える