Como posso fazer uma pesquisa dinâmica de arquivos zip em um determinado caminho (por exemplo: /opt/uploading/"*"/multiple .zip
arquivos) 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 $zip
está 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.