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.