pesquisa dinâmica de arquivos zip em um caminho específico e descompactá-los na mesma pasta dos arquivos descompactados?

pesquisa dinâmica de arquivos zip em um caminho específico e descompactá-los na mesma pasta dos arquivos descompactados?

Como posso fazer uma pesquisa dinâmica de arquivos zip em um determinado caminho (por exemplo: /opt/uploading/"*"/multiple .ziparquivos) e descompactá-los na mesma pasta dos arquivos zip?

A função abaixo é descompactar vários arquivos zip e remover arquivos zip. Mas 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

Responder1

Bem, ele rm $zipestá removendo os arquivos .Zip, então remova-os.

Responder2

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

Em vez disso, faça algo assim:

#!/bin/bash

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

Isso irá percorrer todas as linhas que find produz.

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

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

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

Responder3

Usando GNU Parallel você poderia 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 ficar ocupado aguardando o próximo arquivo zip aparecer.

informação relacionada