スポンサーリンク

diff -sオプションで同一ファイルも抽出

※MACターミナル(BSD系)での動作確認です。
例えば、下記のディレクトリがあったとします。

$ tree
.
├── dir001
│   ├── dir
│   │   └── file2.txt
│   ├── file1.txt
│   └── file3.txt
└── dir002
    ├── dir
    │   └── file2.txt
    ├── file1.txt
    └── file3.txt

4 directories, 6 files

参考:diffの-sオプションで差分がなく同一ファイルの場合にメッセージを表示

diff -sをすると下記のようになります。

$ diff -rs dir001 dir002
Files dir001/dir/file2.txt and dir002/dir/file2.txt are identical
Files dir001/file1.txt and dir002/file1.txt are identical
diff -rs dir001/file3.txt dir002/file3.txt
1d0
< hello

スポンサーリンク

diffコマンド時に差分のないファイルを削除する

まずは、awkでファイルパスのみ抽出します。
参考:awkで特定の列を抽出する

$ diff -rs dir001 dir002 | grep identical$ | awk '{print $2}' 
dir001/dir/file2.txt
dir001/file1.txt

xargsでファイルパスをrmコマンドに渡します

$ diff -rs dir001 dir002 | grep identical$ | awk '{print $2}' | xargs -I{} rm {}

下記が実行結果になります。
参考:[シェル]treeの-Pオプションで特定のファイルのみ表示する
$ tree
.
├── dir001
│   ├── dir
│   └── file3.txt
└── dir002
    ├── dir
    │   └── file2.txt
    ├── file1.txt
    └── file3.txt

4 directories, 4 files

スポンサーリンク