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

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

Я хочу сохранить только непустой вывод команды find в файл. Если вывода нет, файл не должен создаваться.

$ ls folder
aa
$ find . -name 'bb' | tee file
$ cat file
$ ls folder
aa file

Как это сделать?

решение1

Утилитаifneиз пакетаmoreutilsдолжно достичь того, чего вы хотите:

$ find . -name 'bb' | ifne tee file

Из страницы руководства:

Описание

ифневыполняет следующую команду только в том случае, если стандартный ввод не пуст.

решение2

Используйте -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, и т.д.

Связанный контент