Eu tenho um arquivo zip que contém uma hierarquia de diretórios de arquivos. Quero usar o comando unzip do Linux para extrair apenas o subconjunto desses arquivos que possuem uma string específica em algum lugar no caminho do diretório que leva ao arquivo.
Por exemplo, suponha que o arquivo foo.zip contenha estes arquivos:
a/1.txt
acme/2.txt
a/acme/b/3.txt
a/b/acmenet/c/4.txt
a/b/c/5.txt
a/acme/d/6.php
O comando Linux “unzip foo.zip *.txt” extrairá todos os 5 arquivos “txt”.
Como este comando do Linux pode ser modificado para extrair apenas os 3 arquivos “txt” que possuem a string “acme” em algum lugar no caminho do diretório (para extrair apenas 2.txt, 3.txt e 4.txt)?
Responder1
Seu exemplo unzip foo.zip *.txt
só funcionou porque não havia nenhum *.txt
arquivo no seu diretório de trabalho. Caso contrário, *.txt
o shell teria expandido os nomes dos arquivos de texto em seu diretório. Você precisa citá-lo para estar no lado seguro.
Como unzip
usa globs, use
unzip foo.zip '*acme*/*.txt'
ou mesmo
unzip foo.zip '*acme*.txt'
Se você não deseja restaurar a estrutura de diretórios original e extrair os arquivos para o diretório de trabalho atual, adicione a opção -j
:
unzip -j foo.zip '*acme*/*.txt'