LoginSignup
1
0

xargsで標準入力がなければ後続を実行しないオプション。

Posted at

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

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0