Descompactando um arquivo .zip no Linux

1

Eu tenho um arquivo .zip (ele contém vários arquivos, por exemplo, file1.txt, file2.txt, file3.txt ) em um diretório.

Como posso extrair os arquivos do arquivo zip para o mesmo diretório? E como posso criar a lista de todos os arquivos extraídos do arquivo zip?

O nome do arquivo extraído deve ser impresso assim no arquivo chamado: file_list:

file1.txt
file2.txt
file3.txt
filen.txt

Eu tentei o seguinte comando assumindo que o nome do meu arquivo .zip é "data.zip".

unzip -qoj data.zip | unzip -ql data.zip  > file_list 

Eu tenho usado unzip -qoj data.zip para extrair todos os arquivos no mesmo diretório (silenciosamente, sobrescrever, junk_path). Quando tento inserir -l com o primeiro comando unzip, o comando não extrai o arquivo no diretório atual e apenas os arquivos são listados. É por isso que tenho que usar o descompactar novamente após o primeiro pipe. (Se eu estou cometendo um erro aqui, por favor me avise.)

Eu recebo a seguinte saída:

 Length     Date   Time    Name
 --------    ----   ----    ----
        0  12-21-09 14:25   data/
     6148  12-21-09 14:25   data/.DS_Store
        0  12-21-09 14:25   __MACOSX/
        0  12-21-09 14:25   __MACOSX/data/
       82  12-21-09 14:25   __MACOSX/data/._.DS_Store
       82  12-11-09 13:59   data/file1.txt
      120  12-11-09 13:59   data/file2.txt
      166  12-11-09 13:59   data/file3.txt
 --------                   -------
     6598                   8 files

Como faço para extrair apenas file1.txt, file2.txt, file3.txt desta stdout?

É possível fazer isso com um comando do Linux, ou eu tenho que escrever um script perl para isso?

TRiG
fonte

Respostas:

1
unzip data.zip data/file1.txt data/file2.txt data/file3.txt
Konrad Garus
fonte
e se eu tiver 100 arquivos no arquivo .zip?
2
descompacte -l dados.zip | gawk '$ NF ~ / ^ dados \ / arquivo. \. txt $ / {print $ NF;}' | xargs unzip -qoj
jch