xargsで標準入力がない場合の条件分岐

findxargs を組み合わせて処理するとき、find 結果が一件もない場合がある。

たとえば、xargs tar すると、引数が一件もない場合は以下のように終了ステータスが異常になってしまう。終了ステータスをチェックする処理が入っていると、これでは困る。

$ touch a0 a1
$ find -type f -name a\*
./a0
./a1
$ find -type f -name b\*
$ find -type f -name b\* | xargs tar -cvzf b.tgz
tar: Cowardly refusing to create an empty archive
Try `tar --help' or `tar --usage' for more information.
$ echo $?
123

こういうケースでは、xargs に GNU 拡張の --no-run-if-empty/-r オプションを渡すと、標準入力が何もなければコマンドが実行されなくなる。

–no-run-if-empty/-r

If the standard input does not contain any nonblanks, do not run the command. Normally, the command is run once even if there is no input. This option is a GNU extension.

実際に使ってみると

$ find -type f -name b\*  | xargs -r tar -cvzf b.tgz
$ echo $?
0

というように正常終了する。

Advertisements
Tagged with: , ,
Posted in linux, tip

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Archives
  • RT @__apf__: How to write a research paper: a guide for software engineers & practitioners. docs.google.com/presentation/d… /cc @inwyrd 4 months ago
  • RT @HayatoChiba: 昔、自然と対話しながら数学に打ち込んだら何かを悟れるのではと思いたち、専門書1つだけ持ってパワースポットで名高い奈良の山奥に1週間籠ったことがある。しかし泊まった民宿にドカベンが全巻揃っていたため、水島新司と対話しただけで1週間過ぎた。 それ… 5 months ago
  • RT @googlecloud: Ever wonder what underwater fiber optic internet cables look like? Look no further than this deep dive w/ @NatAndLo: https… 5 months ago
  • @ijin UTC+01:00 な時間帯で生活しています、、、 10 months ago
  • RT @mattcutts: Google's world-class Site Reliability Engineering team wrote a new book: amazon.com/Site-Reliabili… It's about managing produc… 1 year ago
%d bloggers like this: