Найдите файлы, grep для шаблона, введите первые 10, затем запустите их

Поскольку вы используете Bash в качестве оболочки, вы можете использовать переменную оболочки CDPATH . В руководстве Bash это описывается как

путь поиска: каждое имя каталога в CDPATH ищется для каталога с альтернативными именами каталогов в CDPATH, разделенными двоеточием (':')

Вы можете добавить следующую строку в свой .bashrc :

CDPATH=".:$HOME"

Если вы позже наберете cd dev , в текущем рабочем каталоге будет производиться поиск подкаталога с именем dev :

  • Если такой каталог существует, он переходит в этот каталог (как обычно работает встроенная команда cd ).
  • Если нет, он затем выполнит поиск в вашем домашнем каталоге ( ~ ), найдет символическую ссылку (поймет, что это ссылка на каталог) и перейдет в целевой каталог (на который указывает ~ / dev ).

Если вы хотите отдать предпочтение каталогам в вашем домашнем каталоге, вы можете сначала указать $ HOME в своем CDPATH ( «$ HOME:.» ]), но я настоятельно не рекомендую этого делать, поскольку это нарушает принцип наименьшего удивления : результирующее поведение слишком сильно отличается от стандартного.

1
02.09.2016, 09:36
2 ответа

Здесь вы можете использовать

tar cvzf files.tar.gz $(find /var/log/file -type f -exec grep -l "pattern" {} + | \
head -n10)

, grep -l будет печатать только файлы, соответствующие шаблону.


Вам нужно будет использовать параметр -P для tar , если вы получаете сообщение об ошибке вроде

error tar: Удаление начального символа «/» из имен членов

см. man tar

-P, --absolute-names
     don't strip leading '/'s from file names

Или вы можете указать -C , чтобы изменить каталог, вместо указания полного пути к файлу архива.

3
27.01.2020, 23:16

попробуйте

tar cvzf tarfile.tgz $(find /var/log/file | grep "pattern" | head -n10 )

где

  • код внутри $ () создать список из 10 файлов.

в отличие от cpio, tar не принимает список файлов в stdin.

2
27.01.2020, 23:16

Теги

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