Descompactar arquivos em diversas subpastas

1. Descompactar arquivos em diversas subpastas

Marlon Batista Ribeiro Júnior
Megadestroyd

(usa Outra)

Enviado em 18/08/2015 - 19:44h

Pessoal é o seguinte, eu possuo uma Pasta central com 1317 subpastas onde estão distribuidos 13 mil arquivos PDFs compactados, eu gostaria de poder descompactar esses arquivos de maneira que eu não extraia para fora dos diretórios em que os atuais ".zips" se encontram.
Já tentei via Windows mais só consegui extrair os mesmos para a raiz, estou aqui pois imagino que o linux possa me oferecer uma gama maior de ferramentas para resolver meu problema.


  


2. Re: Descompactar arquivos em diversas subpastas

Fernando
phoemur

(usa Debian)

Enviado em 18/08/2015 - 20:26h

Agora sim...rs


exec 3< <(find /home/diretorio/ -type f -iname "*.zip"); while read LINE <&3; do unzip "$LINE" -d "$(dirname "$LINE")"; done; exec 3<&-


Assim ele vai extrair cada arquivo ZIP da árvore de diretórios em /home/diretorio/ com saída no mesmo lugar em que estão localizados.
É um comando grande de uma linha só, porém dá pra fazer em estilo de script também:


#!/bin/bash

exec 3< <(find /home/diretorio/ -type f -iname "*.zip")

while read LINE <&3; do
unzip "$LINE" -d "$(dirname "$LINE")"
done

exec 3<&-



3. Re: Descompactar arquivos em diversas subpastas

Wellingthon Dias Queiroz - @tonyhts
tonyhts

(usa Arch Linux)

Enviado em 18/08/2015 - 20:28h

Eu faria assim:
for i in $(find /DIRETORIO/ -type f -iname "*.zip"); do unzip $(echo $i|sed 's/ /\\ /g') -d $(echo $i|sed -r 's/[a-zA-Z _.]*.zip$//1');done 


abs
---
Eu Acredito, que ás vezes são as pessoas que ninguém espera nada que fazem as coisas que ninguém consegue imaginar.

--- Mestre dos Mestres - Alan Turing ---


4. Re: Descompactar arquivos em diversas subpastas

Wellingthon Dias Queiroz - @tonyhts
tonyhts

(usa Arch Linux)

Enviado em 18/08/2015 - 20:30h

Fala @phoemur, blza?

kkk, enquanto eu digitava a resposta, vc postou a outra solução...
A primeira ia bugar...rrs

abs
---
Eu Acredito, que ás vezes são as pessoas que ninguém espera nada que fazem as coisas que ninguém consegue imaginar.

--- Mestre dos Mestres - Alan Turing ---


5. Re: Descompactar arquivos em diversas subpastas

Fernando
phoemur

(usa Debian)

Enviado em 18/08/2015 - 20:34h

tonyhts escreveu:

Fala @phoemur, blza?

kkk, enquanto eu digitava a resposta, vc postou a outra solução...
A primeira ia bugar...rrs

abs
---
Eu Acredito, que ás vezes são as pessoas que ninguém espera nada que fazem as coisas que ninguém consegue imaginar.

--- Mestre dos Mestres - Alan Turing ---


A beleza do shell é que há diversas formas de fazer a mesma coisa...
E a beleza daqui do fórum é que sempre tem alguém disposto a ajudar...
Só toma cuidado que a forma que você postou, se houver espaços ou caracteres especiais no nome do arquivo vai zuar tudo. Por causa do (for i in) e por causa da regex do sed... Dá uma editada lá.
Um abraço




6. Re: Descompactar arquivos em diversas subpastas

Wellingthon Dias Queiroz - @tonyhts
tonyhts

(usa Arch Linux)

Enviado em 18/08/2015 - 20:48h

phoemur escreveu:

A beleza do shell é que há diversas formas de fazer a mesma coisa...
E a beleza daqui do fórum é que sempre tem alguém disposto a ajudar...
Só toma cuidado que a forma que você postou, se houver espaços ou caracteres especiais no nome do arquivo vai zuar tudo. Por causa do (for i in) e por causa da regex do sed... Dá uma editada lá.
Um abraço



Vishiiii, verdade! Corrigido! VAlews...

abs

---
Eu Acredito, que ás vezes são as pessoas que ninguém espera nada que fazem as coisas que ninguém consegue imaginar.

--- Mestre dos Mestres - Alan Turing ---


7. Re: Descompactar arquivos em diversas subpastas

Marlon Batista Ribeiro Júnior
Megadestroyd

(usa Outra)

Enviado em 18/08/2015 - 21:36h

Opa galera, muito obrigado pela pró atividade e pelas respostas tão rápidas, porém tentei como ambos ensinaram e não deu certo.

Com a resposta postada pelo tonyhts eu obtive o seguinte resultado:

debian@debian:/media/debian/MULTIBOOT$ for i in $(find /media/debian/MULTIBOOT/SOFTEXPERT/ -type f -i name "*.zip"); do unzip $(echo $i|sed 's/ /\\ /g') -d $(echo $i|sed -r 's/[a-zA-Z _.]*.zip$//1');done
find: predicado desconhecido '-i'

Já na primeira resposta postada eu obtive a seguinte resposta:

End-of-central-directory signature not found. Either this file is not
a zipfile, or it constitutes one disk of a multi-part archive. In the
latter case the central directory and zipfile comment will be found on
the last disk(s) of this archive.
unzip: cannot find zipfile directory in one of /media/debian/MULTIBOOT/SOFTEXPERT/UNIGEO/SORRISO/RODRIGO CHIKAMI/HOLERÍTES/2340 - HOL (2005-2014) RODRIGO CHIKAMI.pdf.zip or
/media/debian/MULTIBOOT/SOFTEXPERT/UNIGEO/SORRISO/RODRIGO CHIKAMI/HOLERÍTES/2340 - HOL (2005-2014) RODRIGO CHIKAMI.pdf.zip.zip, and cannot find /media/debian/MULTIBOOT/SOFTEXPERT/UNIGEO/SORRISO/RODRIGO CHIKAMI/HOLERÍTES/2340 - HOL (2005-2014) RODRIGO CHIKAMI.pdf.zip.ZIP, period.

Agradeço a atenção de todos!


8. Re: Descompactar arquivos em diversas subpastas

Wellingthon Dias Queiroz - @tonyhts
tonyhts

(usa Arch Linux)

Enviado em 18/08/2015 - 22:16h

Opa! blza?


O comando queo @phoemur sugeriu deveria funcionar...

no meu,
Acho que foi na hora de copiar e colar, nao tem espaco entre i e o name.. é -iname td junto.




for i in $(find /DIRETORIO/ -type f -iname "*.zip"); do unzip $(echo $i|sed 's/ /\\ /g') -d $(echo $i|sed -r 's/[a-zA-Z _.]*.zip$//1');done


abs
---
Eu Acredito, que ás vezes são as pessoas que ninguém espera nada que fazem as coisas que ninguém consegue imaginar.

--- Mestre dos Mestres - Alan Turing ---


9. Re: Descompactar arquivos em diversas subpastas

Marlon Batista Ribeiro Júnior
Megadestroyd

(usa Outra)

Enviado em 19/08/2015 - 00:15h

tonyhts, como você disse havia aquele erro sim mais após corrigi-lo o comando apresentou o seguinte erro:

unzip: cannot find or open (2005-2014), (2005-2014).zip or (2005-2014).ZIP.
unzip: cannot find or open RODRIGO, RODRIGO.zip or RODRIGO.ZIP.
error: must specify directory to which to extract with -d option

Obrigado pela colaboração.


10. Re: Descompactar arquivos em diversas subpastas

Wellingthon Dias Queiroz - @tonyhts
tonyhts

(usa Arch Linux)

Enviado em 19/08/2015 - 01:10h

hummm. aos poucos a gente chega la....

O problema esta sendo o nome nos arquivos com caractwres especias que nao tinha orevisto antes, por exemplo : parenteses e a extensão em maiusculo..

tente assim:

for i in $(find /DIRETORIO/ -type f -iname "*.zip"); do unzip $(echo $i|sed 's/ /\\ /g') -d $(echo $i|sed -r 's/[a-zA-Z _.)(-]*.[ZIPzip]$//1');done


se nao funcionar, posta por favor o resultado de

find /DIRETORIO/ -type f -iname "*.zip" -exec ls -lh {} \;


abs


---
Eu Acredito, que ás vezes são as pessoas que ninguém espera nada que fazem as coisas que ninguém consegue imaginar.

--- Mestre dos Mestres - Alan Turing ---


11. Re: Descompactar arquivos em diversas subpastas

Marlon Batista Ribeiro Júnior
Megadestroyd

(usa Outra)

Enviado em 19/08/2015 - 01:31h

Tentei o comando que você disse e deu o mesmo erro relatado anteriormente, portanto executei o segundo comando e como são vários arquivos eu vou postar só a resposta final do comando:

-rw------- 2 debian debian 1,2M Ago 7 12:49 /media/debian/MULTIBOOT/SOFTEXPERT/UNIGEO/SORRISO/RODRIGO CHIKAMI/HOLERÍTES/2328 - HOL (02-2015) RODRIGO CHIKAMI.pdf.zip
-rw------- 2 debian debian 872K Ago 7 12:49 /media/debian/MULTIBOOT/SOFTEXPERT/UNIGEO/SORRISO/RODRIGO CHIKAMI/HOLERÍTES/2332 - HOL (03-2015) RODRIGO CHIKAMI.pdf.zip
-rw------- 2 debian debian 1,3M Ago 7 12:49 /media/debian/MULTIBOOT/SOFTEXPERT/UNIGEO/SORRISO/RODRIGO CHIKAMI/HOLERÍTES/2336 - HOL (04-2015) RODRIGO CHIKAMI.pdf.zip
-rw------- 2 debian debian 9,8M Ago 7 12:49 /media/debian/MULTIBOOT/SOFTEXPERT/UNIGEO/SORRISO/RODRIGO CHIKAMI/HOLERÍTES/2340 - HOL (2005-2014) RODRIGO CHIKAMI.pdf.zip



12. Re: Descompactar arquivos em diversas subpastas

Wellingthon Dias Queiroz - @tonyhts
tonyhts

(usa Arch Linux)

Enviado em 19/08/2015 - 02:33h

Opa...

Agora vai (acho) rs

for i in $(find /media/debian/MULTIBOOT/SOFTEXPERT/ -type f -iname "*.zip"); do unzip $(echo $i|sed 's/ /\\ /g;s/[)(]/\\&/g') -d $(echo $i|sed -r 's/\/[[:alnum:] _)(.-]*[ZIPzip]$//g'|sed 's/ /\\ /g;s/[)(]/\\&/g');done 



EDIT: fiz mais algumas alteracões
abs
---
Eu Acredito, que ás vezes são as pessoas que ninguém espera nada que fazem as coisas que ninguém consegue imaginar.

--- Mestre dos Mestres - Alan Turing ---



01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts