xargs

xargs は、標準入力から受け取ったファイルリストに対して、 そのファイルに対するコマンドを実行するコマンドです。 以下の例では rm や shred を使っていますので、 実行には十分注意の上、自己責任で実行して下さい。

$ ls
hogehoge
$ ls | xargs ls
hogehoge
この例では何が嬉しいのか、あまりわかりません。

$ ls
hogehoge
$ ls | xargs rm
$ ls
ファイルが消えました。

上の操作を、条件を満たすファイル(以下の例では hoge で始まる名前を持つファイル)に対してやってみます。

$ ls
hogehoge herohero
$ find . -name "hoge*"
hogehoge
$ find . -name "hoge*" | xargs rm
$ ls
herohero
find で条件に合致したファイルだけが標準出力に出て、 それをパイプで xargs に渡すことで rm でファイルが消えました。

不要ファイルを xargs でいっぺんに消す

上の例だと今ひとつ嬉しさがないのですが、 "." (ドット)で始まる隠しファイルや隠しディレクトリが大量にあって、 さらにその下にもサブディレクトリがあるような場合には便利です。

以下では、カレントディレクトリ以下のファイルをすべて消す場合を想定しています。 もちろん、自己責任で実行して下さい。 rm は、(適当なオプション付きの)shred に置き換えてもらっても結構です。

手動でやる場合

xargs を使わずに手動でやる場合には、次のようになるでしょう。
$ rm *
$ rm */*
$ rm */*/*
$ ...
さらに隠しファイルがある場合には
$ rm .[A-z]*
$ rm .[A-z]*/*
$ rm .[A-z]*/.[A-z]*
$ ...
などと面倒です。

xargs を使う場合

xargs を使えば、以上の操作がいっぺんにできます。
$ find . -name "*" | xargs rm
残ったデイレクトリも適宜処理すれば完了です。


Last modified: Mon Jun 8 12:44:57 JST 2015