スポンサーリンク

diffの-xオプションで特定のファイルを除外

-rオプションで再帰的にdiffする時に、特定のファイルを除外したい場合が多々ありました。
diffには-xオプションが備わっています。
※MACターミナル(BSD系)での動作確認です。

diffの-rオプションで再帰的に2つのディレクトリ以下のファイルの差分をとることができます。

$ diff -r dir01 dir02

diffの-xオプションで除外できます。下記は、file.txtをdiff対象から除外しています。
$ diff -r dir01 dir02 -x file.txt

拡張子がexのファイルを除外したい場合です。
$ diff -r dir01 dir02 -x "*.ex"

複数の除外対象を設定したい場合です。-xオプションを複数並べていきます。
$ diff -r dir01 dir02 -x "*.ex" -x "*.txt"

スポンサーリンク

サンプルコード

例えば、下記のディレクトリ構成があったとします。

 $ tree
.
├── dir01
│   ├── 01
│   │   ├── file.ex
│   │   └── file.txt
│   └── file.txt
└── dir02
    ├── 01
    │   ├── file.ex
    │   └── file.txt
    └── file.txt

4 directories, 6 files

下記が実行結果になります。
除外対象なしです。
 $ diff -r dir01 dir02
diff -r dir01/01/file.ex dir02/01/file.ex
1c1
< 
---
> line-diff
diff -r dir01/01/file.txt dir02/01/file.txt
1c1
< 
---
> line-diff

file.txtをdiff対象から除外。
 $ diff -r dir01 dir02 -x file.txt
diff -r -x file.txt dir01/01/file.ex dir02/01/file.ex
1c1
< 
---
> line-diff

拡張子がexのファイルをdiff対象から除外。
 $ diff -r dir01 dir02 -x "*.ex"
diff -r -x '*.ex' dir01/01/file.txt dir02/01/file.txt
1c1
< 
---
> line-diff

拡張子がexとtxtのファイルをdiff対象から除外。
 $ diff -r dir01 dir02 -x "*.ex" -x "*.txt"

スポンサーリンク