Fazer com que o comando unzip do Linux apenas extraia arquivos de diretórios cujos nomes contêm uma determinada string

Fazer com que o comando unzip do Linux apenas extraia arquivos de diretórios cujos nomes contêm uma determinada string

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 *.txtsó funcionou porque não havia nenhum *.txtarquivo 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 unzipusa 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'

informação relacionada