¿Buscar dinámicamente archivos zip en una ruta particular y descomprimirlos en la misma carpeta que los archivos descomprimidos?

¿Buscar dinámicamente archivos zip en una ruta particular y descomprimirlos en la misma carpeta que los archivos descomprimidos?

¿Cómo puedo hacer una búsqueda dinámica de archivos zip en una ruta particular (por ejemplo, /opt/uploading/"*"/multiple .ziparchivos) y descomprimirlos en la misma carpeta que los archivos zip?

La siguiente función es descomprimir varios archivos zip y eliminar archivos zip. Pero quiero que los archivos zip estén ahí con los archivos descomprimidos.

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

Respuesta1

Bueno, rm $zipestá eliminando los archivos .Zip, así que elimínelo.

Respuesta2

Esto es mucho más adecuado para un bucle for que para un bucle while. De esta manera también puede deshacerse del almacenamiento innecesario de resultados defind -iname '*.zip' > zipindex

Haz algo como esto en su lugar:

#!/bin/bash

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

Esto recorrerá todas las líneas que produce la búsqueda.

Por supuesto, deberías prescindir por completo del script bash y hacer una línea de búsqueda como esta:

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

EDITAR: Gracias a @don_crissti y @ilkkachu, logré deshacerme de llamar a otra instancia del Shell en -exec. -execdir ¡es bueno saberlo!

Respuesta3

Usando GNU Parallel puedes hacer esto:

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

De esta manera, no tendrá que esperar a que aparezca el siguiente archivo zip.

información relacionada