unzip
aceita curingas e globs. Se você conhece o nome do arquivo, pode simplesmente dizer:
unzip archive.zip "**/file_to_extract"
para extrair o arquivo.
Eu só sei o nome do arquivo, mas não a sua localização exata. Eu gostaria de extrair apenas esse arquivo do arquivo. E preciso saber sua localização no arquivo.
Como síntese de comentários e respostas, você pode proceder assim:
unzip -l archive.zip | grep "nameOfile"
./tmp/nameOffileponey
./ham/smoked/nameOfile
#identify the path of the file precisely in your archive if filtering gives you several result and then use
unzip archive.zip ./ham/smoked/nameOfile
Isso deve funcionar
Monte o arquivo zip como um sistema de arquivos com fuse-zip . Então você pode acessar arquivos usando qualquer comando que você goste.
mkdir foo
fuse-zip foo.zip foo
Em seguida, copie needle.txt
do subdiretório em que estiver:
find foo -name needle.txt -exec cp -p {} . \;
Ou usando a globalização recursiva do shell (no bash, você precisa executar shopt -s globstar
primeiro; no zsh isso funciona imediatamente):
cp -p foo/**/needle.txt .
Desmonte o sistema de arquivos quando terminar de usá-lo.
fusermount -u foo