Направление не пустого вывода в файл
Я хочу сохранить в файл только непустой вывод команды find. Если нет выходного файла, не следует создавать.
$ ls folder
aa
$ find . -name 'bb' | tee file
$ cat file
$ ls folder
aa file
Как это сделать?
2 ответа
Утилита ifne
из пакета moreutils
должен выполнить то, что вы хотите:
$ find . -name 'bb' | ifne tee file
Со страницы руководства:
Описание
ifne запускает следующую команду тогда и только тогда, когда стандартный ввод не пуст.
Использовать -exec
опция, которая будет работать, только если найдены файлы:
find . -name 'bb' -exec sh -c 'printf "%s\n" "$@" | tee -a file' sh {} +
Объяснение:
printf "%s\n" "$@"
Выведите каждый аргумент с помощью завершающей строки.sh
Второй аргументsh -c
получает назначение$0
,{} +
Как-exec
аргументы, они означают "все выбранные файлы".sh -c
назначает их$1
,$2
, так далее.