Я хочу сохранить только непустой вывод команды находки в файл. Если нет никакого выходного файла, не должен быть создан.
$ ls folder
aa
$ find . -name 'bb' | tee file
$ cat file
$ ls folder
aa file
Как сделать это?
Утилита 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
, и т.д.