Поскольку вы используете Bash в качестве оболочки, вы можете использовать переменную оболочки CDPATH
. В руководстве Bash это описывается как
путь поиска: каждое имя каталога в CDPATH ищется для каталога с альтернативными именами каталогов в CDPATH, разделенными двоеточием (':')
Вы можете добавить следующую строку в свой .bashrc
:
CDPATH=".:$HOME"
Если вы позже наберете cd dev
, в текущем рабочем каталоге будет производиться поиск подкаталога с именем dev
:
cd
). ~
), найдет символическую ссылку (поймет, что это ссылка на каталог) и перейдет в целевой каталог (на который указывает ~ / dev
). Если вы хотите отдать предпочтение каталогам в вашем домашнем каталоге, вы можете сначала указать $ HOME
в своем CDPATH
( «$ HOME:.»
]), но я настоятельно не рекомендую этого делать, поскольку это нарушает принцип наименьшего удивления : результирующее поведение слишком сильно отличается от стандартного.
Здесь вы можете использовать
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
, чтобы изменить каталог, вместо указания полного пути к файлу архива.
попробуйте
tar cvzf tarfile.tgz $(find /var/log/file | grep "pattern" | head -n10 )
где
$ ()
создать список из 10 файлов. в отличие от cpio, tar не принимает список файлов в stdin.