findで見つけたファイルを一括削除する方法【Ubuntu】

こんにちは、minoruです。

Ubuntu(Xubuntuなど含む)でfindコマンドで抽出したファイル群を、一気に一括削除する方法について解説していきます。

Ctrl + Alt + T でターミナルと呼ばれる真っ黒の画面を出し、以下のコマンドを入力。

find (探す場所) -name *~ -print0 | xargs -0 rm

-print0 -0 は、いずれも数字のゼロです。

これを人間語に翻訳すると…

探せ(このフォルダ以下の階層を)ファイル名を言うぞ、ファイル名は何でも良いとにかく最後に「~」が付くファイルをファイル名に空白があるものも扱えるようにしろ。( |  = そして、そのファイルに対して)以下のコマンドを実行だ、ファイル名に空白があるものも扱う、消せ!

こんな感じですかね。

(探す場所)は今いるフォルダ(ディレクトリ)が対象なら無視して入力無しでもOKです。

-nameは以下のワイルドカードを使えるようにするために入れてます。

*はワイルドカードと言って、トランプのジョーカーのようにオールマイティな記号となっており、例えば「*jpg」とか「*pdf」みたいな使い方をすれば、色んなファイルがごちゃまぜになっているフォルダでも、画像やPDFファイルだけを探して消せます。

-print0 これを付けないとファイル名にスペースなどの空白が入っている場合に、上手く動作しないので、空白があるファイル名でも扱えるようにします。

こちらに詳しい解説があります。

「 | 」は前のコマンドの実行結果を、次のコマンドに引き渡す役目があります。つまりfindコマンドで見つけたファイル名を、次のコマンドに伝える役目ですね。

xargsは「 | 」で受け継いだファイル名を使う時に使用します。

-0 これを付けないとファイル名にスペースなどの空白が入っている場合に、上手く動作しないので、空白があるファイル名でも扱えるようにします。

rmはファイルを削除するコマンドです。普通このコマンド単体で使う時は…

rm ファイル名

このように後ろにファイル名を入力するのですが、xargsを使っているので、rmの後ろに何も書かなくても、xargsが受け取ったファイル名が対象だとわかってくれます。

下の階層を探さなくて良い場合

findは通常、指定したフォルダ(ディレクトリ)の中にある、さらに深い階層のフォルダ(サブフォルダ・サブディレクトリ)もファイルを探しに行きます。

指定したフォルダ内・階層だけで良い場合は以下のようにします。

find ~/デスクトップ/家族写真 -maxdepth 1 -name *.jpg

例えば1階層下だけは範囲に入れたい場合は「-maxdepth 2」とします。「-maxdepth 0」にしてしまうと全く探さないので気を付けましょう。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする