У меня есть много файлов, которые мне нужно заархивировать в один каталог. Я не хочу архивировать все файлы в каталоге, а только те, которые соответствуют определенному запросу.
я сделал
grep abc file-* > out.txt
сделать файл со всеми экземплярами «abc» в каждом файле. Мне нужны сами файлы. Как я могу сказать bash архивировать только эти файлы?
grep abc file-* > out.txt
чтобы сделать файл со всеми экземплярами «abc» в каждом файле. Мне нужны сами файлы.zip ZipFile.zip file-*
, это очевидный способ сделать это. Промежуточный файл вам понадобится только в том случае, если вы используете комплексfind
или объединение списков файлов из разных поисков.Ответы:
Очень просто:
То есть, если ваш
out.txt
файл содержит одно имя файла в строке. Он добавит все файлы изout.txt
одного архива под названиемarchive.zip
.В
-@
опции делаетzip
читать STDIN.Если вы хотите пропустить создание временного
out.txt
файла, вы также можете использоватьgrep
возможность печати имен файлов.-r
включает рекурсивный поиск (может не потребоваться в вашем случае) и-l
печатает только имена файлов:источник
cat out.txt | while read line ; do xargs zip archive.zip $line ; done
zip archive.zip $(ls common_name*)
-@
синтаксис опций работает отлично с 10.16, хотя на странице руководства все еще есть язык оnot on MacOS
Альтернативы принятому ответу, отсюда :
источник