es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Descomprimir recursivamente todos los subdirectorios manteniendo la estructura de los archivos.

Soy nuevo en la programación de scripts de bash y me resulta difícil resolver esto.

Tengo una carpeta principal que contiene una mezcla de subdirectorios y subdirectorios comprimidos.

Dentro de esos subdirectorios también hay más archivos comprimidos en zip.

No solo hay archivos .zip, sino también archivos .rar y .7z que también contienen archivos comprimidos en zip / rar / 7z anidados.

Quiero descomprimir todo mi subdirectorio anidado de forma recursiva hasta que la carpeta principal ya no contenga archivos .rar, .zip, .7zip. (estos eventualmente deben eliminarse una vez extraídos). Podría haber miles de subdirectorios, todos con diferentes niveles anidados. Podría tener carpetas comprimidas o archivos comprimidos.

Sin embargo, quiero mantener mi estructura de carpetas, por lo que las carpetas descomprimidas deben permanecer en el mismo lugar donde se han descomprimido.

He intentado este script que funciona para descomprimir, pero no conserva la estructura de archivos.

#!/bin/bash

while [ “find . -type f -name '*.zip' | wc -l” -gt 0 ]

do
find . -type f -name “*.zip” -exec unzip — ‘{}’ \; -exec rm — ‘{}’ \;
done

Por ejemplo, quiero que:

La carpeta ‘a’ contenga la carpeta comprimida ‘b.zip’, que contiene un archivo de texto comprimido con pera.zip (que es pear.txt que se ha comprimido a pear.zip a / b.zip (/pear.zip))

Me gustaría que la carpeta ‘a’ contenga ‘b’ contenga pear.txt ‘a/b/pear.txt’

El script anterior trae ‘b’ (b está vacío) y pera juntos a la carpeta ‘a’ donde se ejecuta el script, que no es lo que quiero. Por ejemplo, ‘a/b’ y ‘a/pear.txt’

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que necesitas un script que pueda descomprimir, descomprimir y descomprimir archivos 7z de manera recursiva mientras se conserva la estructura de la carpeta. Podrías probar algo como esto:

    #!/bin/bash
    
    # Descomprimir, descomprimir y descomprimir archivos 7z de manera recursiva mientras se conserva la estructura de la carpeta
    
    # Descomprimir archivos
    find . -type f -name "*.zip" -exec unzip -n '{}' -d "$(dirname '{}')" \; -exec rm -- '{}' \;
    
    # Descomprimir archivos rar
    find . -type f -name "*.rar" -exec unrar x -o+ '{}' "$(dirname '{}')" \; -exec rm -- '{}' \;
    
    # Descomprimir archivos 7z
    find . -type f -name "*.7z" -exec 7z x -o+ '{}' "$(dirname '{}')" \; -exec rm -- '{}' \;
    

Comments are closed.