2012-04-12 4 views
18

(AとB)が含ま与えられたパターン。はあなただけ2つのディレクトリ内のファイルの再帰的差分を行うことができますどのように再帰的な差分に与えられたパターンに一致するファイル

自分の名前に「狂気」が同じ名前とパス内のaとbとのファイル間の差分を示すだろう
$ diff -r a b -name "*crazy*" 

:例えば、findコマンドで利用可能な同じ構文を使用して、これは次のようになります。

効果的に、私はdiffで利用できる--excludeオプションの反対を探しています。

+0

これは役に立ちそうです。 'grep'は' --include'フラグを持っています – xdhmoore

答えて

11

おそらくこれは少し間接ですが、うまくいくはずです。

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

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

(私はGNU finddiffでしかテストしていません)

EDIT

唯一の非GNU find-printfsedが代替として使用することができていないので:

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

も非GNU diff-Xを持っていることを想定していますどの知りません。

+0

残念ながら、これはMac OS Xで動くはずです。http://stackoverflow.com/questions/752818/why-does-macs-find-not-haveから見ることができます-the-option-printfは、BSDのfindに-printfオプションがないことを示します。したがって、BSDとGNU互換のコマンドを作成する方法は、明らかに良い方法ではありません。 –

+1

@ EdwardD'Souzaが '-printf'を使わないように更新しました – FatalError

+0

@ EdwardD'Souza OSXでGNUツールを入手したい場合は、[MacPorts](http://www.macports.org/)を検討してください。ありがとう@FatalError; –

関連する問題