Как я могу действовать на результаты “определять местоположение” команды?

Только необходимо указать один (или больше) высокоуровневый каталог (каталоги) для включения, и tar рекурсивно опустится во все, что это - дети, и оберните все:

tar cvfz output.tar.gz /path/to/top_folder

(Как @forcefsck отмечает, является ли объект необработанной скоростью, можно кончить v опция для меньшего количества многословия на терминале. Не повторяя каждый файл это добавляет сохранение немногого если время ввода-вывода, говорящее терминалом.)

4
26.03.2012, 21:34
1 ответ

Да, можно использовать 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 - который является, конечно, проблемой, когда Ваши имена файлов содержат пробел...),

8
27.01.2020, 20:50
  • 1
    хорошо это все легко и достаточно просто! :) спасибо! –  cwd 26.03.2012, 22:26
  • 2
    Хороший. простой. Эффективный. –  2bc 26.03.2012, 22:46

Теги

Похожие вопросы