Tengo numerosos archivos zip, cada uno de los cuales contiene varios archivos zip. ¿Cuál es la mejor manera de extraer recursivamente todos los archivos contenidos en este archivo zip y sus archivos zip secundarios, que no son archivos zip en sí mismos?
15
Respuestas:
Esto extraerá todos los archivos zip en el directorio actual, excluyendo cualquier archivo zip que contenga.
Aunque esto extrae el contenido al directorio actual, no todos los archivos terminarán estrictamente en este directorio ya que el contenido puede incluir subdirectorios.
Si realmente quería todos los archivos estrictamente en el directorio actual, puede ejecutar
Nota: esto bloqueará los archivos si hay dos con el mismo nombre en diferentes directorios.
Si desea extraer recursivamente todos los archivos zip y las cremalleras que contiene, a continuación se extraen todos los archivos zip en el directorio actual y todas las cremalleras contenidas en ellos al directorio actual.
fuente
while [ "
encontrar . -type f -name '*.? ar' | wc -l" -gt 0 ]; do find -type f -name "*.?ar" -exec mkdir -p '{}.dir' \; -exec unzip -d '{}.dir' -- '../{}' \; -exec rm -- '{}' \;; done
Según tengo entendido, usted tiene archivos zip que contienen archivos zip, y le gustaría descomprimir los archivos comprimidos anidados cada vez que se extrae uno.
Aquí hay un script bash 4 que descomprime todas las cremalleras en el directorio actual y sus subdirectorios de forma recursiva, elimina cada archivo zip después de que se ha descomprimido y continúa mientras existan archivos zip. Se extrae un archivo zip en un subdirectorio en relación con ese subdirectorio. Advertencia: sin probar, haga una copia de seguridad de los archivos originales antes de probarlo o reemplácelo
rm
moviendo el archivo zip fuera del árbol de directorios .El script también funcionará en zsh si reemplaza la
shopt
línea consetopt nullglob
.Aquí hay un equivalente portátil. La condición de terminación es un poco complicada porque
find
no devuelve espontáneamente un estado para indicar si ha encontrado algún archivo. Advertencia: como arriba.fuente
unzip
no hace esto, porque la forma UNIX es hacer una cosa y hacerlo bien, no manejar todos los casos especiales locos en cada herramienta. Por lo tanto, debe usar el shell (que hace bien el trabajo de "unir las cosas"). Esto lo convierte en una pregunta de programación, y dado que TODAS las posibles preguntas de programación han sido respondidas en StackOverflow, aquí: ¿Cómo descomprime recursivamente archivos en un directorio y sus subdirectorios desde la línea de comandos de Unix?fuente
Este script perl extraerá cada archivo .zip en su propio subdirectorio. Ejecute el script más de una vez para manejar archivos zip anidados. No elimina los archivos .zip después de la extracción, pero puede hacer ese cambio agregando una llamada unlink ().
fuente
La forma más fácil es usar atool: http://www.nongnu.org/atool/ Es un script muy bueno que usa programas zip, unzip, tar, rar, etc. para extraer cualquier archivo.
Use
atool -x package_name.zip
para descomprimirlos a todos o si desea usarlo en el directorio con muchos archivos zip, use unfor
bucle simple :for f in *; do atool -x $f; fi
(deberácd
ingresar al directorio deseado con los archivos zip antes de usar esto).fuente
atool
El comportamiento aquí no difiere significativamente de descomprimir, diría, tampoco extrae archivos ZIP de forma recursiva.Deberá tener cuidado al descomprimir automáticamente los archivos zip dentro de los archivos zip:
http://research.swtch.com/2010/03/zip-files-all-way-down.html
Es posible inventar un archivo zip que produzca un archivo zip como salida, lo que produce un archivo zip como salida, etc.
Además, me parece recordar que las personas que crean archivos zip que "explotarían", es decir, un archivo zip muy pequeño se descomprimiría en varios gigabytes de salida. Esta es una faceta del método de compresión.
fuente
Quizás esto ayude (funcionó para mí):
fuente
Necesitaba una solución como la de Giles de 2010, excepto que necesitaba preservar la estructura de la carpeta, no descomprimir todo en el directorio de nivel superior. Aquí está mi opinión sobre la suya con tres líneas agregadas / modificadas:
fuente
Echa un vistazo a esta utilidad nzip basada en Java para archivos zip anidados. La extracción y compresión de las cremalleras anidadas se puede hacer fácilmente usando los siguientes comandos
java -jar nzip.jar -c list -s readme.zip
java -jar nzip.jar -c extract -s "C: \ project \ readme.zip" -t readme
java -jar nzip.jar -c compress -s readme -t "C: \ project \ readme.zip"
PD. Soy el autor y estaré encantado de corregir cualquier error rápidamente.
fuente