Descomprimir un lote de archivos


33

Cuando lo intento

 unzip filename.zip

funciona. Sin embargo, necesito descomprimir una serie de archivos zip.

Por qué son:

 find . -name "*.zip" -print0 | xargs -0 unzip

o

 ls *.zip | xargs unzip

¿no funciona?

En ambos casos aparece el mensaje "precaución: nombre de archivo no coincidente:".

Respuestas:


48

Puedes emitir el comando:

$ unzip '*.zip'

Mira aquí para referencia .


No lo dije claramente, pero no todos están en el mismo directorio. Entonces, necesito la salida de find.
jeannoburto

44
Gracias. Esto podría coincidir perfectamente con la pregunta real, pero esto resolvió mi problema. Estaba intentando unzip *y regresó caution: filename not matchedpara cada archivo pero unzip '*.zip'hizo el trabajo.
Ivan

27

Sus comandos no funcionan porque llenan todos los archivos en la misma línea de comandos. Si bien eso funciona con la mayoría de los programas, unziptomará el primer argumento como el archivo zip, y cualquiera después del primero como archivos para extraer de él. Debe ejecutar el comando una vez para cada archivo:

find . -name "*.zip" -print0 | xargs -0 -n1 unzip

O

find . -name '*.zip' -exec unzip {} \;

El segundo parece ser mejor en caso de que realmente haya muchos archivos. (De lo contrario, se quejó de que el comando es demasiado largo con xargs)
Recct

5

En bash también puedes hacer lo siguiente:

for i in *.zip; do
    unzip "$i"
done

También unzippuede tomar el -dinterruptor para que pueda dirigir la salida a diferentes ubicaciones.

Por ejemplo:

uzdir=/path/to/unzips
for i in *.zip; do
    [ -d "$uzdir/$i" ] || mkdir -p "$uzdir/$i"
    unzip "$i" -d "$uzdir/$i"
done

1

Hay una solución mucho más fácil que las de bucle dadas anteriormente, use el -dindicador de directorio :

unzip -o somefiles.zip -d $directoryPath

-despecifica el directorio para extraer, no el directorio para buscar archivos.
LegendaryDude
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.