LINUX.ORG.RU

ls+grep+zip в один архив

 ,


0

1

Всем привет!

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

ls -laR | grep "plate"

А как их всех потом запаковать в 1 архив???



Последнее исправление: Andreezy (всего исправлений: 2)

Ответ на: комментарий от annulen
find . -name '*plate*'
find ./ \( -type f -o -type l \) -name '*plate*' \
  | cut -c3- \
  | sort \
  | tar --files-from - ...
  • Через -type ограничиваем find(1) только файлами и симлинками (избавит архив от лишних вхождений);
  • С помощью cut(1) отрезаем ./ у вхождений (они в архиве не нужны, всё равно это будет равносильно их отсутствию, а с длинным листингом экономит место);
  • Сортируем с помощью sort(1) полученный список, это ощутимо влияет на сжатие в положительную сторону;
  • Сразу скармливаем tar(1), для этого (по крайней мере во FreeBSD) есть флаг --files-from -.

@Andreezy, не забудь покормить кота.

mord0d ★★★★★
()
Ответ на: комментарий от mord0d

cut -c3-

Может лучше «man find» прочитать про -printf ?

Сортируем с помощью sort(1) полученный список, это ощутимо влияет на сжатие в положительную сторону;

Откуда дровишки?

И где здесь сжатие?

vel ★★★★★
()
Ответ на: комментарий от shell-script

plate_files.tar — имя выбрано, чтобы оно попало в условие find и tar попытался его добавить в архив?

И, если уж TC дошёл до ″--null″, то и вашему примеру не помешает ″--add-file″, чтобы обрабатывать файлы, с именами, начинающимися с чёрточки ″-″.

mky ★★★★★
()
Ответ на: комментарий от mky

plate_files.tar — имя выбрано, чтобы оно попало в условие find и tar попытался его добавить в архив?

Имя файла выбрано от фонаря. Я не проверял это в командной строке. Да, стоит поменять.

то и вашему примеру не помешает ″--add-file″

Для верности стоит.

shell-script ★★★★★
()
Ответ на: комментарий от vel

Сортируем с помощью sort(1) полученный список, это ощутимо влияет на сжатие в положительную сторону;

Откуда дровишки?

Из личного опыта.

И где здесь сжатие?

Без сжатия сортировка ничего не даст, да.

mord0d ★★★★★
()