こんにちは、minoruです。
Ubuntu(Xubuntuなど含む)でfindコマンドで抽出したファイル群を、一気に一括削除する方法について解説していきます。
Ctrl + Alt + T でターミナルと呼ばれる真っ黒の画面を出し、以下のコマンドを入力。
-print0 -0 は、いずれも数字のゼロです。
これを人間語に翻訳すると…
探せ(このフォルダ以下の階層を)ファイル名を言うぞ、ファイル名は何でも良いとにかく最後に「~」が付くファイルを。ファイル名に空白があるものも扱えるようにしろ。( | = そして、そのファイルに対して)以下のコマンドを実行だ、ファイル名に空白があるものも扱う、消せ!
こんな感じですかね。
(探す場所)は今いるフォルダ(ディレクトリ)が対象なら無視して入力無しでもOKです。
-nameは以下のワイルドカードを使えるようにするために入れてます。
*はワイルドカードと言って、トランプのジョーカーのようにオールマイティな記号となっており、例えば「*jpg」とか「*pdf」みたいな使い方をすれば、色んなファイルがごちゃまぜになっているフォルダでも、画像やPDFファイルだけを探して消せます。
-print0 これを付けないとファイル名にスペースなどの空白が入っている場合に、上手く動作しないので、空白があるファイル名でも扱えるようにします。
こちらに詳しい解説があります。
「 | 」は前のコマンドの実行結果を、次のコマンドに引き渡す役目があります。つまりfindコマンドで見つけたファイル名を、次のコマンドに伝える役目ですね。
xargsは「 | 」で受け継いだファイル名を使う時に使用します。
-0 これを付けないとファイル名にスペースなどの空白が入っている場合に、上手く動作しないので、空白があるファイル名でも扱えるようにします。
rmはファイルを削除するコマンドです。普通このコマンド単体で使う時は…
このように後ろにファイル名を入力するのですが、xargsを使っているので、rmの後ろに何も書かなくても、xargsが受け取ったファイル名が対象だとわかってくれます。
下の階層を探さなくて良い場合
findは通常、指定したフォルダ(ディレクトリ)の中にある、さらに深い階層のフォルダ(サブフォルダ・サブディレクトリ)もファイルを探しに行きます。
指定したフォルダ内・階層だけで良い場合は以下のようにします。
例えば1階層下だけは範囲に入れたい場合は「-maxdepth 2」とします。「-maxdepth 0」にしてしまうと全く探さないので気を付けましょう。