Только необходимо указать один (или больше) высокоуровневый каталог (каталоги) для включения, и tar
рекурсивно опустится во все, что это - дети, и оберните все:
tar cvfz output.tar.gz /path/to/top_folder
(Как @forcefsck отмечает, является ли объект необработанной скоростью, можно кончить v
опция для меньшего количества многословия на терминале. Не повторяя каждый файл это добавляет сохранение немногого если время ввода-вывода, говорящее терминалом.)
Да, можно использовать xargs
для этого.
Например, простое:
$ locate commands.cfg | xargs grep check_dns
(Когда grep
видит несколько файлов, которые это ищет в каждом и включает печать имени файла вдоль соответствий.)
Или можно явно включить печать имени файла через:
$ locate commands.cfg | xargs grep -H check_dns
(На всякий случай один grep
назван только с 1 аргументом xargs
)
Для программ, которые только принимают один аргумент имени файла (в отличие от этого, grep
) можно ограничить количество переданных аргументов как это:
$ locate commands.cfg | xargs -n1 grep check_dns
Это не печатает названия файлов, откуда подобранные строки.
Результат эквивалентен:
$ locate commands.cfg | xargs grep -h check_dns
С современным locate/xargs можно также защитить от пробельных проблем:
$ locate -0 commands.cfg | xargs -0 grep -H check_dns
(Пробелом по умолчанию разделяет вход xargs
- который является, конечно, проблемой, когда Ваши имена файлов содержат пробел...),