Tenho muitos arquivos que preciso compactar em um único diretório. Não quero compactar todos os arquivos no diretório, mas apenas os que correspondem a uma determinada consulta.
eu fiz
grep abc file-* > out.txt
para criar um arquivo com todas as instâncias de "abc" em cada arquivo. Eu preciso dos próprios arquivos. Como posso dizer ao bash para compactar apenas esses arquivos?
grep abc file-* > out.txt
para criar um arquivo com todas as instâncias de "abc" em cada arquivo. Eu preciso dos próprios arquivos.zip ZipFile.zip file-*
, que é a maneira óbvia de fazê-lo. Você precisaria de um arquivo intermediário apenas se estivesse usando um complexofind
ou uma concatenação de listas de arquivos de pesquisas diferentes.Respostas:
Muito simples:
Ou seja, se o seu
out.txt
arquivo contiver um nome de arquivo por linha. Ele adicionará todos os arquivos deout.txt
um arquivo chamadoarchive.zip
.A
-@
opção faz azip
leitura do STDIN.Se você quiser pular a criação de um
out.txt
arquivo temporário , também poderá usargrep
o recurso para imprimir nomes de arquivos.-r
ativa a pesquisa recursiva (pode não ser necessária no seu caso) e-l
imprime apenas nomes de arquivos:fonte
cat out.txt | while read line ; do xargs zip archive.zip $line ; done
zip archive.zip $(ls common_name*)
-@
sintaxe da opção funciona bem a partir de 10.16, mesmo que a página de manual ainda inclua linguagem sobrenot on MacOS
Alternativas para a resposta aceita, a partir daqui :
fonte