find の結果が空の場合、xargs は何も実行しない

2021-06-21

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

LinuxCentOS 6,CentOS 7

Posted by admin