Как извлечь первый файл из cbz-файлов за один пакет?

Как извлечь первый файл из cbz-файлов за один пакет?

У меня есть коллекция комиксов, которые я храню на своем компьютере, в основном в .cbzформате (это просто архив ZIP, но с причудливым названием). Недавно я решил сделать коллаж обложек определенной серии комиксов, для чего мне понадобится первый файл в архиве комиксов.

Вот описание проблемы:

  • 75 .cbzфайлов в одной папке;
  • Каждый файл имеет имя вида <series name> #<issue number>, где номера выпусков идут от 1 до 75 (одна проблема: это не похоже на 01, 02, 03 и т. д., поэтому может возникнуть путаница с сортировкой);
    • Каждый файл внутри каждого архива имеет имя типа<issue name> <3-digit issue number with preceding zeros>
  • При необходимости архивы можно переименовывать .zip, но я знаю, что 7Zip (и некоторые другие архиваторы, но не unrar) достаточно хорошо справляется с CBZ;

Что мне нужно:

  • Первый файл из каждого из 75 архивов. Файлы уже имеют отличительные имена, поэтому нет необходимости переименовывать их на выходе.

Что у меня есть:

  • Убунту 16.04
  • 7Zip
  • интернет-соединение

Как мне это сделать? Какая команда извлечет первый файл из каждого архива в папке в ту же папку?

решение1

Если вам не нужно переименовывать выходные файлы, то я предлагаю что-то вроде этого:

#!/bin/bash

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

Сохраните его в файле типа script.shи поместите его в тот же каталог, где находятся ваши комиксы. Затем дайте ему разрешение на выполнение:

chmod +x script.sh

И запустите его:

./script.sh

Как это работает?

Мы можем получить список всех файлов в zip-архиве, используя zipinfo:

zipinfo -2 mycomic.cbz

выводится что-то похожее на:

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

Затем с помощью awk 'NR==1 { print }'мы можем вернуть первое имя файла, которое: First file within the archive.jpg.

Теперь, чтобы извлечь этот файл, я могу использовать что unzip-то вроде этого:

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

Связанный контент