Extraia vários arquivos zip, cada um em uma nova pasta com o mesmo nome, via terminal Ubuntu

28

Eu tenho muitos arquivos zip a.zip, b.zip, c.zip, ... e quero extrair cada um deles em novas pastas a, b, c, ... respectivamente, via terminal.

Na verdade, o que eu quero é uma solução que eu possa usar mais tarde com um find porque eu tenho muitas pastas 2014, 2013, 2012, ... cada uma delas contendo muitos arquivos zip a.zip, b.zip, etc. Se eu fizer find . -name "*.zip" -exec {} unzip \; , ele descompactará todos os arquivos e os colocará na respectiva pasta pai.

    
por Michael 31.08.2014 / 15:00

4 respostas

54

Você deve poder usar a opção -d do unzip para definir um diretório alternativo para o conteúdo do archive.

unzip -d a a.zip
unzip -d b b.zip

e assim por diante. Em uma expressão find , você deve conseguir derivar o nome do diretório a partir do nome do arquivo zip usando a expansão do parâmetro shell, por exemplo,

find -name '*.zip' -exec sh -c 'unzip -d "${1%.*}" "$1"' _ {} \;

Teste primeiro adicionando echo , ou seja,

find -name '*.zip' -exec sh -c 'echo unzip -d "${1%.*}" "$1"' _ {} \;

ou algo parecido

while read -rd $'
unzip -d a a.zip
unzip -d b b.zip
' f; do unzip -d "${f%.*}" "$f" done < <(find -name '*.zip' -print0)
    
por steeldriver 31.08.2014 / 15:31
7

Eu mesmo vim procurando por isso, só para perceber que já tinha feito isso com outros comandos e que poderia ser aplicado a praticamente qualquer outra coisa, do jeito que eu já estava fazendo isso.

O método de busca é muito complicado, sem motivo.

for i in *.zip; do unzip "$i" -d "${i%%.zip}"; done
    
por kencinder 07.10.2017 / 19:28
5

Use simplesmente

unzip '*.zip' -d /home/user/folder/
    
por James Muller 26.11.2015 / 04:37
0

Eu também precisava fazer isso usando o unrar. Isto pode ser conseguido através de uma pequena modificação no código do kencinder.

for i in *.rar; do mkdir "${i%%.rar}"; unrar x -r "$i" "${i%%.rar}"; done 

PS: Eu queria adicionar isso como um comentário, mas não tenho pontos de reputação suficientes!

    
por Atul Singh Arora 13.02.2018 / 11:33