
Tengo un archivo zip con muchos archivos y un archivo de texto sin formato con una lista de archivos (~10000 elementos), que necesito extraer de ese archivo usando bash.
¿Cuál es la mejor manera de realizar esa operación? La forma obvia es ejecutar descomprimir para cada línea de archivo, pero parece muy lento.
Respuesta1
En lugar de ejecutar unzip
en cada archivo, puede ejecutar en la lista completa de archivos ingresando el archivo de texto sin formato como entrada:
unzip -j MyZipFile.zip <<<textfile
Respuesta2
Descomprimir admite especificar qué archivos extraer:
unzip archive.zip file1.txt file2.txt file3.txt ...
Pero esto no funcionará para 10000 artículos. Puede dividir su lista de archivos en trozos de 100 y ejecutar descomprimir con ellos; esta sería una implementación más rápida que extraer cada archivo por sí solo.
Respuesta3
Podrías usar xargs con la -a
opción de leer sus argumentos desde un archivo. Probablemente también use una bandera para limitar la cantidad de argumentos a una cantidad adecuada para garantizar que no haya demasiados para que el shell los maneje si existe tal limitación.