スポンサーリンク

diffの-rで差分のあったファイルを一覧で取得

dir01とdir02のディレクトリ間で下記のように差分があったとします。
※MACターミナル(BSD系)での動作確認です。

 $ diff -r dir01 dir02
diff -r dir01/in.txt dir02/in.txt
1d0
< diff
\ No newline at end of file
diff -r dir01/in2.txt dir02/in2.txt
0a1
> diff
\ No newline at end of file

下記のようにすると、ワンライナーで差分のあったファイルを取得できました。
 $ diff -rq dir01 dir02 | awk '{print $2}' | xargs -I path basename path
in.txt
in2.txt

スポンサーリンク

diff -rqとawkとbasenameを組み合わせる

上記の解説です。

まず、diff -rqオプションで、差分の内容を非表示にします。
参考:diffの-qオプションで差分のあるファイルのみ表示(差分の内容は非表示

 $ diff -rq dir01 dir02
Files dir01/in.txt and dir02/in.txt differ
Files dir01/in2.txt and dir02/in2.txt differ

そして、awkで2行目のみを抽出します。
参考:awkの$0,$1,$2,$3,変数で列の操作
 $ diff -rq dir01 dir02 | awk '{print $2}'
dir01/in.txt
dir01/in2.txt

そして、xargsとbasenameでファイル名のみを抽出します。
 $ diff -rq dir01 dir02 | awk '{print $2}' | xargs -I path basename path
in.txt
in2.txt

一覧が出来上がりました。

スポンサーリンク