サブディレクトリ以下の特定ファイルを一括して削除するコマンド

2015年9月10日木曜日

Linux

t f B! P L
bashやcshといったシェル上であるファイルを一括して削除したい場合があります。例えば、emacsを使っていると、いろいろなディレクトリに~が最後に付加されたバックアップファイルが大量にできます。これらのファイルは、次の2ステップで一括して削除できます。
  1. 削除するファイルの確認
  2. 削除実行

1. 削除するファイルの確認

まず、削除対象が含まれる最上位のディレクトリに移動し、findコマンドで実際に削除されるファイルを確認します。次の例は、emacsでファイルを編集すると生成されるバックアップファイル(名前の最後に~が付いたファイル)を削除する場合です。
$pwd
/cygdrive/c/work/iv_vpi
$ find ./ -name "*~" -print
./hello.c~
./hello.v~
./run.sh~
./run_hello.sh~
./tmp/readme.txt~
./vfloat.c~
./vpi_test.v~

2. 削除実行

次に、検索時のfindのコマンドの-printを-exec rm {} \;に変更すると、対象ファイルがすべて削除されます。
$ find ./ -name "*~" -exec rm {} \;
-execの後に別のコマンドを指定すると、削除以外の処理も行えます。例えば、grepを指定すると、findで見つかった対象ファイルに対してのみ文字検索を行うことができます。
もしくは、-printを-deleteに変えても、対象ファイルの削除が行えます。
$ find ./ -name "*~" -delete

このブログを検索

QooQ