shellトレーニング〜書生スタイルの調べ〜<!-- --> | <!-- -->塩焼き太郎のブログ♪
塩焼き太郎のブログ♪

shellトレーニング〜書生スタイルの調べ〜

Posted: November 6, 2014

さて、今回のテーマは

ずばり、複数のファイルのdiffをとる時どうするか。

diffを取るとき、通常は

diff ファイル1 ファイル2

という具合に、二つのファイル間にある差分を確認することができる。

では、もしdiffをとりたいファイルが複数あるとしたら。。。?

バージョン管理しっかりしといたら問題ないのであるが、

書生のようなレトロアナログ機械オンチな人間は

よく作成したファイルに修正を加えたりする時には

hogeo.yymmdd.txt

のように、念のためバックアップをとったり、また新しい名前にコピーしたりして修正するようにしている。

はてさて、そのような場合に問題になるのが、

どのファイルが正しいのか。

当時、バックアップとしてコピーしていたのか、新しく名前を変えて編集するためにコピーしていたのか、さっぱりワカメ状態。

こんな経験、あるのだ。書生には。

さて、そんなこんなで大量に存在してしまったファイル達のdiffをとりたい。

稚拙な書生は以下のようにdiffをとることにした(暫定)

もっと簡単な方法ある方、ぜひとも教えていただきたい汗

やり方としては

1:findコマンドで比較したいファイルを抽出

2:結果をwhileループに入れる

3:whileループ内で比較するファイル一つを固定し(findコマンドとawkで一番始めのファイルに固定)

4:固定したファイルとその他のファイルをdiffコマンドで比較

という流れである。

この方法、正直おそろしくいけてないと思うが現在の書生の力だと仕方あるまい。

イメージ

find ./ -type f -regex "比較したいファイル達が抽出できる正規表現" | while read line; do

pivot=$(find ./ -type f -regex "比較したいファイル達が抽出できる正規表現" | awk  ' NR==1')

echo "diff $pivot $line"

diff $pivot $line

done

ブログにコードをそのまま書くのが書生スタイル。

では。