Tengo una colección de cómics que guardo en mi computadora, principalmente en .cbz
formato (que es solo un archivo ZIP, pero con un nombre elegante). Recientemente, decidí hacer un collage de las portadas de una serie de cómics específica, para lo cual necesitaría el primer archivo del archivo de cómics.
Aquí está el desglose del problema:
- 75
.cbz
archivos en una sola carpeta; - Cada archivo tiene un nombre como
<series name> #<issue number>
, donde los números de edición van del 1 al 75 (un problema: no es como 01, 02, 03, etc., por lo que puede haber confusión al ordenar allí);- Cada archivo dentro de cada archivo tiene el nombre
<issue name> <3-digit issue number with preceding zeros>
- Cada archivo dentro de cada archivo tiene el nombre
- Se puede cambiar el nombre de los archivos
.zip
si es necesario, pero sé que 7Zip (y algunos otros archivadores, pero no unrar) maneja CBZ bastante bien;
Lo que necesito:
- El primer archivo de cada uno de los 75 archivos. Los archivos ya tienen nombres distintivos, por lo que no es necesario cambiarles el nombre en la salida.
Lo que tengo:
- ubuntu 16.04
- 7Zip
- conexión a Internet
¿Cómo hago para que esto suceda? ¿Qué comando extraerá el primer archivo de cada archivo de una carpeta a la misma carpeta?
Respuesta1
Si no necesita cambiar el nombre de los archivos de salida, le sugiero algo como esto:
#!/bin/bash
for file in *.cbz
do
cover="`zipinfo -2 "$file" | awk 'NR==2 {exit} 1'`"
unzip -j "$file" "$cover"
done;
Guárdalo en un archivo como script.sh
y colócalo en el mismo directorio que tus cómics. Luego dale permiso de ejecución:
chmod +x script.sh
Y ejecútelo:
./script.sh
¿Como funciona?
Podemos obtener una lista de todos los archivos dentro de un archivo zip usando zipinfo
:
zipinfo -2 mycomic.cbz
genera algo similar a:
First file within the archive.jpg
Second file within the archive.jpg
...
Luego, usando awk 'NR==1 { print }'
podemos devolver el primer nombre de archivo que es: First file within the archive.jpg
.
Ahora para extraer este archivo puedo usar un unzip
me gusta:
unzip -j mycomic.cbz "First file within the archive.jpg"