xargsで標準入力がなければ後続を実行しないオプション。
対象ファイルを探して、ファイル(コピー、移動、削除)運用するシェルはよくありますよね。
今まで私は、(細かい処理は省いてます)運用シェルで以下のようにしていました。
find <検索directory> -type f -mtime +14 > tmp.list
while read LINE
do
if [ -n "${LINE}" ]; then
rm ${LINE}
if [ $? -ne 0 ]; then
echo "Failed to delete ${LINE}." > ${LOGFILE}
fi
fi
done < tmp.list
わざわざ、tmp.listにファイル一覧を出力してから次の処理にしていたのは、どのファイルで失敗しかた分からなくなってしまうからだ。(findの結果を直接リダイレクトでもいいですが)
どのファイルで失敗しかた分からなくてもいいのなら
find <検索directory> -type f -mtime +14 | xargs /bin/rm
でいいのだが、findで何も見つからなかったら・・・
rm: missing operand
Try `rm --help' for more information.
と出て非常に格好悪い・・・
そこでxargsには、標準入力が空だったら何もしない--no-run-if-empty
オプションがあるではないかw
find <検索directory> -type f -mtime +14 | xargs --no-run-if-empty /bin/rm
とすればfindで何も見つからなくても格好悪いメッセージを出力することなくスルーしてくれます。
うーーーん、気持ちいいwww