Bem, o rm $zip
está removendo os arquivos .Zip, portanto, remova-o.
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
Bem, o rm $zip
está removendo os arquivos .Zip, portanto, remova-o.
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!
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.
Tags shell-script