busca dinâmica de arquivos zip em determinado caminho e descompacte-o na mesma pasta com os arquivos descompactados?

1

Como posso fazer uma pesquisa dinâmica de arquivos zip em um caminho específico (por exemplo: arquivos% OC_de%)? e descompacte-o na mesma pasta com os arquivos zip?

Abaixo da função está descompactando vários arquivos zip e removendo arquivos zip. Mas eu quero que os arquivos zip estejam lá com os arquivos descompactados.

while true; do
   find -iname '*.zip' > zipindex
   test -s zipindex || break
   for zip in $(cat zipindex); do unzip -o $zip && rm $zip; done
done
    
por keerthi 18.04.2017 / 04:39

3 respostas

1

Bem, o rm $zip está removendo os arquivos .Zip, portanto, remova-o.

    
por 18.04.2017 / 05:05
1

Isso é muito mais adequado para um loop for do que para um loop while. Dessa forma, você também pode se livrar da economia desnecessária de resultados de find -iname '*.zip' > zipindex

Faça algo assim:

#!/bin/bash

for zip in $(find -iname '*.zip'); do
    unzip -o $zip
done

Isto irá percorrer todas as linhas que encontrar produz.

Claro, você deve dispensar completamente o script bash e fazer um find oneliner assim:

find -iname '*.zip' -execdir unzip {} \;

EDIT: Graças a @don_crissti e @ilkkachu, eu consegui me livrar de chamar outra instância do shell em -exec. -execdir é bom saber!

    
por 18.04.2017 / 13:55
1

Usando o GNU Parallel, você pode fazer isso:

find my_dir | grep -E '\.zip$' | parallel unzip
inotifywait -qmre MOVED_TO -e CLOSE_WRITE --format %w%f my_dir | grep  -E '\.zip$' | parallel -u unzip

Dessa forma, você não precisa esperar muito para que o próximo arquivo zip seja exibido.

    
por 19.04.2017 / 00:30