Pages

2005-08-16

引数の数が多すぎて rm が文句を言うとき

沢山のファイルを削除したいとする。

$ rm `ls *.txt`

ところが、ファイルの数が一万を超えるあたりから、rm コマンドがファイル数の多さに音を上げる。そんな時、xargs コマンドを使うと、スムーズに削除できる。

$ ls *.txt > foo.dat
$ xargs rm < foo.dat

バッククォートと xargs コマンドの違いは、展開されるタイミング。 バッククォートは shell の機能なので、shell の実効時に展開される。 つまり、一万のファイルがあったら一万の引数が rm コマンドに渡される。 一方、xargs は削除するファイル名を foo.dat から一つずつ展開して rm コマンドに渡す。 さらに、この方法なら一旦出力したファイル名リストを sed や Perl でいじるのも、好みのままなので、使い勝手がいい。

No comments:

Post a Comment