find の結果が空の場合、xargs は何も実行しない
findの結果をxargsに送って、ファイルを削除したりする場合てLinuxサーバーを運用しているとありますよね。
その場合、下記のコマンドを実行した場合
$ find /home/hoge/xxx/log/ -mtime +90 -type f -name "*.log" -print | xargs rm -f
※ 上記コマンドは、/home/hoge/xxx/log/のディレクトリ内で、ファイルが最後に修正されたのが90日以上でファイル名が「*.log」のファイルを削除するコマンドです
findの結果が空だと以下のメッセージが表示されます
rm: missing operand Try `rm --help' for more information.
このメッセージを表示されないxargs のオプションは「–no-run-if-empty, -r」になります
manからの抜粋だと、説明は以下となります
【manからの抜粋】
–no-run-if-empty or
-r
標準入力に空白しか含まれていない場合は、指定したコマンドを実行しない。 通常では、入力が全くない場合でも、コマンドが一回は実行されるのだ。 このオプションは GNU の拡張である。
「–no-run-if-empty or -r」のオプションをつけて実行します
【書式】
find [検索対象ディレクトリ] [検索条件] [コマンド] | xargs –no-run-if-empty [コマンド]
find [検索対象ディレクトリ] [検索条件] [コマンド] | xargs -r [コマンド]
$ find /home/hoge/xxx/log/ --mtime +90 -type f -name "*.log" -print | xargs --no-run-if-empty rm -f $ find /home/hoge/xxx/log/ --mtime +90 -type f -name "*.log" -print | xargs --no-run-if-empty rm -f
ディスカッション
コメント一覧
find のオプションではなく、xargs かと。
findのオプションは間違いですね。xargsのオプションに変更しています