1. ホーム
  2. バッシュ

[解決済み】stdin入力が空の場合、xargsコマンドを無視する方法は?

2022-04-03 09:35:50

質問

このコマンドを考えてみましょう。

ls /mydir/*.txt | xargs chown root

にあるすべてのテキストファイルの所有者を変更することを意図しています。 mydir からルート

問題は、もし .txt の中にある mydir を指定すると、xargs はパスが指定されていないというエラーを送出します。これはエラーが投げられるので無害な例ですが、ここで使うスクリプトのように、空白のパスはカレントディレクトリであると見なされる場合があります。そのため、もし私がこのコマンドを /home/tom/ に対して結果がない場合 ls /mydir/*.txt の下にあるすべてのファイルが /home/tom/ は所有者がrootに変更されます。

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

どのように解決するのですか?

GNUの場合 xargs を使用することができます。 -r または --no-run-if-empty オプションで指定します。

--no-run-if-empty

-r

標準入力に空白以外がない場合は、コマンドを実行しないでください。 通常、入力がなくてもコマンドは一度だけ実行されます。 このオプションはGNUの拡張機能です.

BSD版の xargs は、macOS で使用されているため、空の入力に対してコマンドを実行しません。 -r オプションは必要ありません(また、そのバージョンの xargs ).