Linuxのxargsには--no-run-if-empty付けとけ

知らなかったというか面倒で放置してた。

cronで定期実行するスクリプトの中に

find PATH CONDITIONS | xargs COMMAND

みたいなのがあったとして、これが時々エラー吐く、みたいなことがあったんですわ。あー xargs の呼び出すコマンド(例えば rm )に入力がないときにエラー出るんかー、変なのーって思いながら、ちょこちょこそれを忘れては引っかかり、をくり返していたんです。

なんでか今日分かりました。BSD の xargs を使った場合はそういうエラー出ないのです。だからすぐ忘れる。

GNU のバカーと思ったりしたのですが、man の恐ろしい量のオプションを読んでいたら

--no-run-if-empty

なんて文字が! なんてこった。というわけで実際のスクリプトの一部はこんな感じにしてみた。

BSD のクセに gnu findutils 使ってるとか cygwin 使ってるやつのことなんか知らない。

[2011-11-09 追記] 最近の BSD xargs には -r というオプションがあって、これが findutils の xargs の -r と同じ動作をするそうです。残念ながら OSX 10.6 の xargs には存在しなかったので普段使いにはできないのですが、サーバ周りでは共通のオプションにできるかも。

zsh の alias というブコメががあるんですけど、cron で zsh 使わないので、それは今回のケースにおいては解法としてニーズに合ってないっす1

  1. そもそも手作業のときは一度 find でリストだけ出すってのが習慣になってるので –no-run-if-empty もまったく必要ないんですよね。 

More