Como extrair o primeiro arquivo de arquivos cbz em um lote?

3

Eu tenho uma coleção de histórias em quadrinhos que eu armazeno no meu computador, principalmente em .cbz format (que é apenas um arquivo ZIP, mas com um nome sofisticado). Recentemente, decidi fazer uma colagem das capas de uma série de histórias em quadrinhos específica, para a qual eu precisaria do primeiro arquivo no arquivo de histórias em quadrinhos.

Veja a análise do problema:

  • 75 .cbz arquivos em uma única pasta;
  • Cada arquivo tem um nome como <series name> #<issue number> , onde os números de problema vão de 1 a 75 (um problema: não é como 01, 02, 03, etc, então pode haver uma confusão com a classificação lá);
    • Cada arquivo dentro de cada arquivo é denominado como <issue name> <3-digit issue number with preceding zeros>
  • Os arquivos podem ser renomeados para .zip , se necessário, mas eu sei que o 7Zip (e alguns outros arquivadores, mas não o unrar) manipula bem o CBZ;

O que eu preciso:

  • O primeiro arquivo de cada um dos 75 arquivos. Os arquivos já possuem nomes distintos, portanto, não há necessidade de renomeá-los na saída.

O que eu tenho:

  • Ubuntu 16.04
  • 7Zip
  • conexão com a Internet

Como faço isso acontecer? Qual comando irá extrair o primeiro arquivo de cada arquivo em uma pasta para a mesma pasta?

    
por Gallifreyan 28.05.2017 / 16:21

1 resposta

5

Se você não precisar renomear os arquivos de saída, sugiro algo assim:

#!/bin/bash

for file in *.cbz
do
 cover="'zipinfo -2 "$file" | awk 'NR==2 {exit} 1''"
 unzip -j "$file" "$cover"
done;

Salve-o em um arquivo como script.sh e coloque-o no mesmo diretório de seus quadrinhos. Em seguida, conceda a permissão de execução:

chmod +x script.sh

E execute:

./script.sh

Como isso funciona?

Podemos obter uma lista de todos os arquivos em um arquivo zip usando zipinfo :

zipinfo -2 mycomic.cbz

gera algo semelhante a:

First file within the archive.jpg
Second file within the archive.jpg
...

Em seguida, usando awk 'NR==1 { print }' , podemos retornar o primeiro nome de arquivo, que é: First file within the archive.jpg .

Agora, para extrair este arquivo, posso usar unzip como:

unzip -j mycomic.cbz "First file within the archive.jpg"
    
por Ravexina 28.05.2017 / 17:04