stdin 入力が空の場合に xargs コマンドを無視するにはどうすればよいでしょうか? 質問する

stdin 入力が空の場合に xargs コマンドを無視するにはどうすればよいでしょうか? 質問する

次のコマンドを考えてみましょう:

ls /mydir/*.txt | xargs chown root

目的は、すべてのテキストファイルの所有者をmydirルートに変更することです。

.txt問題は、そこにファイルがない場合mydir、xargs がパスが指定されていないというエラーを表示することです。これはエラーがスローされるため無害な例ですが、ここで使用するスクリプトのように、空のパスが現在のディレクトリであると想定される場合もあります。そのため、そのコマンドを/home/tom/then から実行すると、結果が表示されずls /mydir/*.txt、その下のすべてのファイル/home/tom/の所有者が root に変更されます。

では、xargs に空の結果を無視させるにはどうすればよいでしょうか?

ベストアンサー1

GNU の場合、またはオプションをxargs使用できます。-r--no-run-if-empty

--no-run-if-empty
-r
標準入力に空白以外の文字が含まれていない場合は、コマンドを実行しません。通常、入力がない場合でもコマンドは 1 回実行されます。このオプションは GNU 拡張機能です。

macOS で使用される のBSD バージョンではxargs、入力が空の場合にコマンドは実行されないため、-rオプションは必要ありません ( のそのバージョンでは受け入れられませんxargs)。

おすすめ記事