O utilitário ifne
do pacote moreutils
deve realizar o que você quer:
$ find . -name 'bb' | ifne tee file
Da página do manual:
% bl0ck_qu0te%Eu quero salvar apenas a saída não vazia do comando find em um arquivo. Se não houver arquivo de saída, não deve ser criado.
$ ls folder
aa
$ find . -name 'bb' | tee file
$ cat file
$ ls folder
aa file
Como fazer isso?
Use a opção -exec
, que só será executada se os arquivos forem encontrados:
find . -name 'bb' -exec sh -c 'printf "%s\n" "$@" | tee -a file' sh {} +
Explicação:
printf "%s\n" "$@"
Imprime cada argumento com uma nova linha à direita. sh
O segundo argumento para sh -c
é atribuído a $0
. {} +
Como -exec
arguments, estes significam "todos os arquivos selecionados". sh -c
atribui isso a $1
, $2
, etc.