Tenho uma coleção de histórias em quadrinhos que guardo no meu computador, a maioria em .cbz
formato (que é apenas um arquivo ZIP, mas com um nome chique). Recentemente, resolvi fazer uma colagem das capas de uma série de quadrinhos específica, para a qual precisaria do primeiro arquivo do arquivo de quadrinhos.
Aqui está 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 dos problemas vão de 1 a 75 (um problema: não é como 01, 02, 03, etc, então pode haver confusão com a classificação);- Cada arquivo dentro de cada arquivo é nomeado como
<issue name> <3-digit issue number with preceding zeros>
- Cada arquivo dentro de cada arquivo é nomeado como
- Os arquivos podem ser renomeados
.zip
se necessário, mas sei que o 7Zip (e alguns outros arquivadores, mas não unrar) lida com CBZ bem o suficiente;
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 de internet
Como faço para que isso aconteça? Qual comando extrairá o primeiro arquivo de cada arquivo em uma pasta para a mesma pasta?
Responder1
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 dos seus quadrinhos. Em seguida, dê permissão de execução:
chmod +x script.sh
E execute:
./script.sh
Como funciona?
Podemos obter uma lista de todos os arquivos dentro de 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
...
Então, usando awk 'NR==1 { print }'
podemos retornar o primeiro nome do arquivo que é: First file within the archive.jpg
.
Agora, para extrair este arquivo, posso usar um unzip
like:
unzip -j mycomic.cbz "First file within the archive.jpg"