xargsも使ってみましょう
あわしろいくや:findが出てきたので、xargsにも触れるべきですな。
やまね:xargs便利だよねー。知らないともったいない。
編集S:こないだの「for `find 条件`; do 実行コマンド;done」黒魔術以外にもなんかあるので?
ミズノ:xargs使う方が便利なことも多いかもー。for文は即興で組めばなんでもできるんですが、事実上プログラム書いてるのと変わらないので頭使うんですよねー。こっちは頭使わなくてもできる感じ。
村田:「find . -name '*.txt' | xargs ls -lh」とか試すといいで味噌。
編集S:おお、findで見つかったファイルに「ls -lh」が実行された!(説明台詞)
瀬尾浩史:(説明台詞)とか身も蓋もないペン……。
編集S:でもこれだけだと「ls -lh *.txt」とあまり変わらないよね? サブディレクトリにあるファイルも処理してくれる以外。
ミズノ:「xargs ls -lh」の、「ls -lh」の部分を任意のコマンドにすると便利になりますねぇ。「grep -i ascii」とかにすると、「findで見つけたテキストファイルすべてについて、『ascii』っていう文字列がないか探す」という小技に。これも使い道は無限大。
やまね:xargsは、「受け取ったファイルリストを、順番に処理するもの」だと思っておくといいです。いろいろと細かい工夫をしてくれるけど、まずはそのレベルで。
編集S:う、これってfindと組み合わせないといけないもの?
hito:いえ、テキストでファイル名を出力してくれるものとなら何とでも組み合わせられます。「/bin/ls *.txt」なんてのとも組み合わせられますよ。「find . -name '*.txt'| xargs ls -alh」なんてのが覚えられない場合、「/bin/ls *.txt| xargs -ls -alh」ってやってもOK。
瀬尾浩史:何にでも付けられるんだペン。
あわしろいくや:locateコマンドとも組み合わせられますし、可能性はいろいろありますな。「dpkg -L」と組み合わせたりもできます。
ミズノ:逆に、xargs側で「受け取る」コマンドを変更することもできるので、あきらかなゴミファイルとか、一時ダウンロードファイルしかないディレクトリなら、「find . -size +100M | xargs rm -i」なんてのも便利ですね。100MBを越えてるファイルを削除する。「rm -i」なので、一応「これ本当に消していい?」って聞いてくれる。
あわしろいくや:「xargs cp -t」とか「xargs mv -t」なんかで受けると、ファイルの移動やコピーにも使えますな。もっともバックアップには他の方法を使った方がいいですが、ゴミ掃除には便利です。
編集S:ところで、「test file」なんていうファイルがあると妙なことになるんだけど……。「test」っていうファイルに対する操作になっちゃう。
小林:そういうファイルが存在するなら、「find . -name '*.txt' -print0 | xargs -0」とすると大丈夫です。がおー。
やまね:ついに語尾ですらなくなった。酔っぱらいこええ。
ミズノ:酔っぱらいは人類最強の存在ですからね。
編集S:ところでこの「-print0」とか「-0」はどういう意味なので。
瀬尾浩史:ヌル文字区切りペン。ヌルターミネートとも言うペン。
編集S:えーと……わからん。
ミズノ:世の中には知らなくていいことがいっぱいあるんですよ……。「ファイル名の区切り」としてふだんは空白文字が使われているけど、「ヌル文字」という特殊なものを区切りにすると、あいだに空白文字が入っていても安全、と。
やまね:findの「-print0」が「区切り文字にヌル文字を使って出力する」で、xargsの「-0」が、「入力されてくるファイル名はヌル文字で区切られている」っていう指定だね。
編集S:と言われるとなんとなく分かったような分かってないような気分になった。
hito:ヌルターミネートって、プログラマ的には別に特殊じゃないよね、という気もうっすら。ある程度以上に使い込む人は把握しておいた方がいいような気も、ちょっとだけする。知ってて損になることはないし。
瀬尾浩史:まあ、はじめのうちは魔術なのでおまじないがあっても仕方ないペン、で済ませておくペン!
(次ページへ続く)
この連載の記事
-
第61回
PC
~師範、Ubuntu道場が最終回です!~ -
第60回
PC
~師範、組版システム「TeX」について教えてください!~ -
第59回
PC
~師範、Ubuntu関連のイベントを教えてください!~ -
第58回
PC
~師範、日本語Remixの作り方を教えてください!~ -
第57回
PC
~師範、Ubuntu独自のテクノロジーについて教えてください!~ -
第56回
PC
~師範、いまどきの仮想化について教えてください!~ -
第55回
PC
~師範、Ubuntu 12.04の特徴を教えてください!~ -
第54回
PC
~みなさん、Ubuntuに触ったきっかけを教えてください!~ -
第53回
PC
~師範、Ubuntuのヘビーユーザーってどんな感じでしょう?~ -
第52回
PC
~師範、Ubuntuは今後どうなるんですか?~ -
第51回
PC
~師範、ARMって何ですか!~ - この連載の一覧へ