Nriver / Episode-ReName

电视剧/番剧自动化重命名工具, 一键批量改名. 可配合QBittorrent下载后自动重命名, 方便Emby自动刮削. 支持Windows, Linux, MacOS, Docker 和 群晖套件环境运行
GNU Affero General Public License v3.0
1.1k stars 73 forks source link

关于保留原始文件用于做种的可能性探讨 #44

Open dddepg opened 7 months ago

dddepg commented 7 months ago

原因

qb下载后提倡做做种,增加点分享精神 以及避免被拉黑ip

个人使用环境

我个人使用环境为群晖 docker 环境,因此使用方式为使用 python3 运行 EpisodeReName.py 文件,windows 环境下暂时不清楚是如何调用的,因此下文的讨论将基于该文件的代码

可能的优化更名方式 os.link

通过查看源码可看到在 812 行进行了如下操作:


        tmp_name = new + '.new'
        os.rename(old, tmp_name)

        # 目标文件已存在, 先删除
        if os.path.exists(new):
            os.remove(new)

        # 临时文件重命名
        os.rename(tmp_name, new)

可以看到程序是直接将原文件(old)使用 os.rename 方法进行了重命名。

是否可以考虑使用 os.link 方法来创建硬链接呢?硬链接与原文件指向的是同一个内容区块,同时不会占用实际空间,昨晚尝试之后在 jellyfin 中也可以顺利识别到。

缺陷在于该方法仅在 windows 环境与 unix 环境下可使用不过该项目的目标环境本来也就这俩吧

示例截图

查看文件,S01E11 是创建的硬链接,可以看到与下方实际存在的文件指向同一个数据块,第二个则是查看实际占用磁盘空间 image

jellyfin 中也能正常识别到文件

image

仍需优化的问题

创建硬链接后与原文件在同一目录下,会对 jellyfin 等的扫描出现干扰,也许可以增加一个前缀,如下所示:

if move_up_to_season_folder:
        new_path = format_path(prefix + ‘/’ +season_path + '/' + new_name)
    else:
        new_path = format_path(prefix + ‘/’ +parent_folder_path + '/' + new_name)

这样就可以将另外一个文件夹映射为媒体库了,同时不干扰做种。

不过这个方法还没测试过,先提出一个可能性吧

dddepg commented 7 months ago

顺便一提使用 os.symlink 方法的话 jellyfin 会产生报错,稍微看了一眼似乎是无法通过软链接读取到实际文件的样子