Как заархивировать список файлов в Linux


17

У меня есть много файлов, которые мне нужно заархивировать в один каталог. Я не хочу архивировать все файлы в каталоге, а только те, которые соответствуют определенному запросу.

я сделал

grep abc file-* > out.txt 

сделать файл со всеми экземплярами «abc» в каждом файле. Мне нужны сами файлы. Как я могу сказать bash архивировать только эти файлы?


Подстановочные знаки не работает? Почему? Если я могу спросить ...
Джерран

@jherran Я не хочу архивировать все файлы в каталоге, только те, которые соответствуют определенному запросу. Я сделал, grep abc file-* > out.txtчтобы сделать файл со всеми экземплярами «abc» в каждом файле. Мне нужны сами файлы.
Джон Мэнгуал

Что означает @jherran zip ZipFile.zip file-*, это очевидный способ сделать это. Промежуточный файл вам понадобится только в том случае, если вы используете комплекс findили объединение списков файлов из разных поисков.
AFH

Ответы:


31

Очень просто:

zip archive -@ < out.txt

То есть, если ваш out.txtфайл содержит одно имя файла в строке. Он добавит все файлы из out.txtодного архива под названием archive.zip.

В -@опции делает zipчитать STDIN.

Если вы хотите пропустить создание временного out.txtфайла, вы также можете использовать grepвозможность печати имен файлов. -rвключает рекурсивный поиск (может не потребоваться в вашем случае) и -lпечатает только имена файлов:

grep -rl "abc" file-* | zip archive -@

Работает хорошо, за исключением того, что у меня есть список файлов, где в именах файлов есть пробелы. Я пытался как экранировать их с помощью ``, так и не экранировать их, один раз в кавычках и один раз без кавычек вокруг имени файла (одна строка - одно имя файла). Пока ничего не получалось.
Томас В.

2
Я заставил его работать с `\` пробелами и без кавычек в файле и следующего:cat out.txt | while read line ; do xargs zip archive.zip $line ; done
Томас В.

если вы хотите заархивировать файлы с похожими именами, попробуйтеzip archive.zip $(ls common_name*)
chepe263

@ chepe263 Это ломается, если файлы имеют пробелы в своем пути. Обычно не рекомендуется анализировать вывод ls.
Slhck

Для любого другого пользователя Mac, который воспользовался здесь любезностью индексации поисковой системы, -@синтаксис опций работает отлично с 10.16, хотя на странице руководства все еще есть язык оnot on MacOS
Эйдан Майлз

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.