如何一次性从 cbz 文件中提取第一个文件?

如何一次性从 cbz 文件中提取第一个文件?

我收藏了一些漫画书,大部分都存储在电脑中,.cbz格式为(ZIP 存档,但名字很花哨)。最近,我决定制作一个特定漫画系列的封面拼贴画,为此我需要漫画书存档中的第一个文件。

问题的具体分解如下:

  • .cbz单个文件夹中有75 个文件;
  • 每个文件都有一个名称<series name> #<issue number>,如,其中问题编号从 1 到 75(一个问题:它不像 01、02、03 等,因此在那里排序可能会造成混淆);
    • 每个档案中的每个文件都命名为<issue name> <3-digit issue number with preceding zeros>
  • 如有必要,可以重命名档案.zip,但我知道 7Zip(和一些其他档案程序,但不是 unrar)可以很好地处理 CBZ;

我需要的:

  • 75 个档案中的第一个文件。这些文件已经有了独特的名称,因此无需在输出时重命名它们。

我拥有的:

  • Ubuntu 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"

相关内容