空でない出力をファイルに送る

空でない出力をファイルに送る

find コマンドの空でない出力のみをファイルに保存したいです。出力がない場合、ファイルは作成されません。

$ ls folder
aa
$ find . -name 'bb' | tee file
$ cat file
$ ls folder
aa file

どうやってするの?

答え1

ユーティリティifneパッケージからmoreutilsあなたが望むことを達成するはずです:

$ find . -name 'bb' | ifne tee file

man ページから:

説明

イフネ標準入力が空でない場合にのみ、次のコマンドを実行します。

答え2

-execファイルが見つかった場合にのみ実行されるオプションを使用します。

find . -name 'bb' -exec sh -c 'printf "%s\n" "$@" | tee -a file' sh {} +

説明:

  • printf "%s\n" "$@"各引数を末尾に改行を付けて出力します。
  • shの 2 番目の引数sh -cが に割り当てられます$0
  • {} +引数として-exec、これらは「選択されたすべてのファイル」を表します。sh -cこれらを、などに割り当て$1ます$2

関連情報