我有一组存档文件(zip 和 rar 格式),我需要重命名其中的一些文件。具体来说,我想做这样的事情:
for each archive file in a directory
for each file in the archive
if the file name matches the regular expression /(.* - [0-9]{2})([0-9]{2} - .)*/
rename the file as \1-\2
诀窍并不在于生成新名称;我可以用 或bash
或其他任何方式来做到这一点。它是使用/或/sed
来操作档案中的文件的一组命令rar
unrar
unzip
zip
(如果这有区别的话,我会重新格式化一些 CBR/CBZ 文件,以使双页跨页在 SimpleComic 中按正确顺序出现——它将第 0203 页解释为第 203 页,这让故事有点难以理解)
答案1
我认为最简单的方法是解压每个档案,执行重命名操作,然后重新打包。
在 Linux 上,我可以使用 FUSE 文件系统来透明地解压档案,然后像操作普通文件夹一样操作这些档案,使用批处理脚本进行所有重命名。我不知道 Mac 上是否存在这种特定的 FUSE 文件系统。
答案2
我看了你的例子,看到了 PYTHON CODE:)
我真的认为这才是解决问题的方法。我知道这不是 stackoverflow……但这是我能解决你的问题的唯一方法。
提取所有文件的示例代码:
import zipfile
a = zipfile.ZipFile("C:\\x.zip", 'r')
for i in a.namelist(): #Extract every file from it
b = open("C:\\"+i, 'wb')
b.write(a.read(i))
#HERE YOU INSERT WHAT YOU WANT TO DO TO EACH FILE (b is the last file)
b.close()
a.close()
希望这可以帮助
本页教你如何安装 MAC 命令行解压工具。
因此,您可以编写一个脚本来解压文件,并编写一个脚本来压缩文件,然后从 python 中调用,并让 python 更改名称。
要执行外部脚本,请使用:
import os;
os.system("path/scritname");
答案3
rar 有一个命令行开关来重命名档案中的文件:
rar rn 存档.rar 文件名 新文件名
但是你使用的 zip 实用程序不支持。你需要像 Ryan 所说的那样提取、重命名并重新压缩。其他 Mac 版 zip 实用程序可能具有此功能。我知道 7-zip 支持在存档中重命名自 2.30 beta 25 起,虽然我还没有检查他们是否支持从命令行使用它。7-zip 在命令行选项方面相当广泛,所以我认为它可以。
答案4
我也一直在研究这个问题,我认为最简单的方法就是编写一个 python 脚本来完成它,特别是因为你要处理 RAR 和 ZIP 文件。
看起来没有一种特别干净的方法来重命名 zip 存档中的文件,除非解压所有文件,重命名要重命名的文件,然后将它们重新压缩,这确实不太理想。不过,我偶然发现了一个名为的 OS/X 实用程序,zipnote
它确实可以做到这一点:
它看起来不太容易使用,但可能值得研究,假设它实际上不解压文件本身,它应该很容易实现自动化。与此同时,命令行 OS/X rar 实用程序支持通过 重新命名 RAR 档案内的文件rar rn foobar.rar oldname newname
。