📝

linuxで検索したファイル(特定のファイル)を一括で削除する

2024/01/13に公開

ディレクトリに以下の6ファイルがあるとします。

$ ls -l
total 0
-rw-r--r-- 1 root root 0 Jan 13 08:47 2023-01-01-01-30-01.zip
-rw-r--r-- 1 root root 0 Jan 13 08:47 2023-01-02-01-30-01.zip
-rw-r--r-- 1 root root 0 Jan 13 08:47 2023-01-03-01-30-01.zip
-rw-r--r-- 1 root root 0 Jan 13 08:42 2023-12-22-01-30-01.zip
-rw-r--r-- 1 root root 0 Jan 13 08:42 2023-12-23-01-30-01.zip
-rw-r--r-- 1 root root 0 Jan 13 08:47 2023-12-24-01-30-01.zip

この中から、2023-01-01-01-30-01.zip, 2023-01-02-01-30-01.zip, 2023-01-03-01-30-01.zipのファイルを削除したいとします。ちまちまrmをして1つずつファイルを削除するのは手間ですよね。
なので、ここで便利なコマンドを使用します。
コマンドはこれです。

$ find -name "ファイル名のパターン" -exec rm {} \;

findで検索して該当したファイルを削除します。ファイル名のパターンのところは、ワイルドカードを含めることができます。なので、先ほど書いた3ファイルを削除するには、以下のようにコマンドを入力して実行します。

$ find -name "2023-01*" -exec rm {} \;

これで、まとめて3ファイルを削除することができました。

$ ls -l
total 0
-rw-r--r-- 1 root root 0 Jan 13 08:42 2023-12-22-01-30-01.zip
-rw-r--r-- 1 root root 0 Jan 13 08:42 2023-12-23-01-30-01.zip
-rw-r--r-- 1 root root 0 Jan 13 08:47 2023-12-24-01-30-01.zip

まずはfindで検索する。その検索結果から削除するファイルを確認してから、削除を実行した方が良いです。

参考
https://utano.jp/entry/2016/07/linux-search-file-name-delete/

Discussion