ディレクトリ構造
project-root/
├── config/
│ ├── app.properties
│ ├── db.properties
│ ├── temp.txt
│ └── readme.md
├── resources/
│ ├── messages.properties
│ ├── dummy.json
│ ├── data.xml
│ └── nested/
│ ├── nested.properties
│ ├── notes.txt
│ └── info.log
└── scripts/
├── deploy.sh
└── clean.properties
使用コマンド
上記から.properties
がつくファイル以外をすべて削除したい場合
find ./project-root -type f ! name '*.properties' | xargs rm -f
xargs
は前のコマンドの結果を次のコマンドの引数として渡してくれるコマンドなので、今回でいくとfindで探してきた`*.properties‘以外のものが引数として渡されて削除される形になります。
他には下記のような方法もあります。
find ./project-roo -type f ! -name '*.properties' -exec rm -f {} \;
-exec
はfindで見つけたファイル1つ1つに対して別のコマンドを実行したいときに使用します。
ちなみにxargs
はfindで見つけたファイルすべてに対して一括で実行してくれます。
追記
find ./project-roo -type f -name '*.properties' -exec rm -f {} \+
さいごを;
ではなく+
にすることで1つ1つのファイルではなく、多くのファイルに対して(制限はある)実行できるそうです!
まとめ
どちらを使用してもいいとは思いますが、xargsを使用する方法でいくとファイル名にスペースなどが入っている場合に思った通りの動作にならない可能性もあるので使い分けるのがいいかと思われます。