Как извлечь первый файл из файлов 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 .cbz файлов в одной папке;

Что у меня:

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

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

3
задан 28 May 2017 в 18:38

3 ответа

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

#!/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

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

We может получить список всех файлов в 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"
5
ответ дан 22 May 2018 в 22:09
  • 1
    Получена ошибка для каждого файла без вывода: Archive: Lucifer #10.cbz caution: filename not matched: – Gallifreyan 28 May 2017 в 18:11
  • 2
    @Gallifreyan Обновлено, еще раз проверьте его;) – Ravexina 28 May 2017 в 18:14
  • 3
    Это сработало! ... Но извлекла 2-ю страницу каждой проблемы (т. Е. Файлы заканчиваются на 002): D – Gallifreyan 28 May 2017 в 18:18
  • 4
    Измените значение NR==2 на NR==1, если вы получите желаемый результат;) – Ravexina 28 May 2017 в 18:19
  • 5
    Да, это сработало отлично! Теперь, как работает эта магия? Будет ли это работать, если файлы в архивах не будут перечислены? – Gallifreyan 28 May 2017 в 18:20

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

#!/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

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

We может получить список всех файлов в 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"
5
ответ дан 18 July 2018 в 12:35

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

#!/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

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

We может получить список всех файлов в 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"
5
ответ дан 24 July 2018 в 19:59

Другие вопросы по тегам:

Похожие вопросы: