Направление не пустого вывода в файл

Я хочу сохранить в файл только непустой вывод команды 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, так далее.
Другие вопросы по тегам