diffの使い方

良くやるのは、-N、-u、-r、-dを付けて

diff -Nurd ソースディレクトリ1 ソースディレクトリ2

によるディレクトリ内の全ファイルチェックおよび差分表示とかだったりします。

ここで、オリジナルである上記のソースディレクトリ1の方はmakeとかしないので特に問題とか無いのですが、ソースディレクトリ2の方はconfigureやmakeを行いつつソースを改変していくのでオリジナルには存在しなかった大量のファイルも含むようになってしまいます。

この状態で"diff -Nurd"とやると、本来チェックして欲しいソースファイル以外にも大量にヒットしてしまい(configureが生成するMakefileとか)、どえらいことになります。

これを回避するために、これまでは変更対象ファイルを個別にdiffして>>によるリダイレクトで.diffファイルに追記するように注意深く地道にやっていたのですが(そういうshファイルを作ってた)、これもだんだん面倒になってきました。

"man diff"を読んだ限りでは、-xあるいは--excludeというオプションがあって、ファイル名のベース部分がここで指定したパターンに一致する場合にはdiff対象から除外する、というような使い方ができるようなのですが、逆のパターンは無いようです。指定した拡張子のファイルのみdiffチェックする、というようなのとかが無いです。

さてさて、どーしたものかという感じです。



find | xargsと連動できるようにdiffをラップしたbashスクリプトを書いてみましたが、やっぱりだめ(泪
mysqlの場合、sql_yacc.hとか、元々のソースにも入っていて、しかもmake時に再度自動生成されるようなファイルがあったりするので、本来はdiffに反応して欲しくないファイルも大量に反応してしまいます。

そうなるとpatchファイルが本来のサイズの数十倍とかになって、収拾がつかないっす。

面倒でも丁寧に手動で更新ファイルリストを管理するしかないですね。