
Eu tenho um arquivo zip com muitos arquivos e um arquivo de texto simples com uma lista de arquivos (~ 10.000 itens), que preciso extrair desse arquivo usando o bash.
Qual a melhor forma de realizar essa operação? A maneira óbvia é executar a descompactação para cada linha do arquivo, mas parece ser muito lenta.
Responder1
Em vez de executar unzip
em cada arquivo, você pode executar em toda a lista de arquivos alimentando o arquivo de texto simples como entrada:
unzip -j MyZipFile.zip <<<textfile
Responder2
Descompactar suporta especificar quais arquivos extrair:
unzip archive.zip file1.txt file2.txt file3.txt ...
Mas isso não funcionará para 10.000 itens. Você pode dividir sua lista de arquivos em pedaços de 100 e descompactá-los. Isso seria uma implementação mais rápida do que extrair cada arquivo sozinho.
Responder3
Você poderia usar xargs com a -a
opção de ler seus argumentos de um arquivo. Provavelmente também use um sinalizador para limitar a quantidade de argumentos a uma quantidade apropriada para garantir que não haja muitos para o shell manipular, se houver tal limitação.