¿Cómo descomprimir y descomprimir files recursivamente?

Tengo un file enorme que contiene cremalleras y rars con files zip y rar ubicados dentro de un cuadro de Linux.

Básicamente necesito una secuencia de commands o una línea que busque de forma recursiva a través de los directorys y descomprima y descomprima cualquier rar o zip que encuentre.

Related of "¿Cómo descomprimir y descomprimir files recursivamente?"

Aquí hay una solución de alguien con un script de shell.

http://www.dbforums.com/unix-shell-scripts/1619154-how-unzip-files-recursively.html

Parece que Linux no tiene una opción de descompression recursiva 🙁

La única forma en que puedo pensar en hacer esto es hacer loops varias veces con Buscar y ejecutar un script que elimine los files una vez que se hayan desempaquetado correctamente. Tendrá que examinar subdirectorys varias veces para que no sea exactamente eficiente. (nombres de file esperados en negrita en la parte superior)

recursive_unpack

#!/bin/bash if [ -d "$1" ]; then STARTDIR="$1" else echo "starting dir not found: $1" exit fi COUNTER=1 while [ $COUNTER -gt 0 ]; do COUNTER=`find "$STARTDIR" -type f \( -iname '*.zip' -o -iname '*.rar' \) -exec ./unpacker \{\} \; | wc -l` done 

desempaquetar

 #!/bin/bash BASENAME=`basename "$1"` BASEDIR=`dirname "$1"` cd "$BASEDIR" EXT=`echo "$BASENAME" | awk -F . '{print $NF}'` if [ "$EXT" = "zip" ]; then unzip -qq "$BASENAME" if [ $? -eq 0 ]; then echo "zip unpacked: $1" rm "$BASENAME" fi fi if [ "$EXT" = "rar" ]; then unrar e -y -c- -inul "$BASENAME" if [ $? -eq 0 ]; then echo "rar unpacked: $1" rm "$BASENAME" fi fi 

hacer

 chmod u+x recursive_unpack chmod u+x unpacker 

llámalo con ./recursive_unpack "/my/directory/containing/my/files"

  • recursive_unpack espera desempaquetar en el mismo directory
  • unrar y unzip necesitan ser instalados
  • si no puede encontrar el directory, saldrá con un error
  • no elimine los posts de eco en un desempaquetador, se usan para verificar la presencia de files para desempaquetar y terminar el ciclo

Una línea rápida, no verifica si ya se ha extraído un file:

 $ find . -name '*.rar' -execdir unrar e '{}' + && find . -name '*.zip' -execdir unzip -tq '{}' + 

Quizás dtrx ( http://brettcsmith.org/2007/dtrx/ ) servirá, aunque no estoy seguro de si maneja el tipo rar.