¿Cómo extraer el primer archivo de archivos cbz en un solo lote?

¿Cómo extraer el primer archivo de archivos cbz en un solo lote?

Tengo una colección de cómics que guardo en mi computadora, principalmente en .cbzformato (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 .cbzarchivos 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>
  • Se puede cambiar el nombre de los archivos .zipsi 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.shy 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 unzipme gusta:

unzip -j mycomic.cbz "First file within the archive.jpg"

información relacionada