我有一个系列不按季节编号,而是按从 0 到 150 左右的绝对顺序编号。我想按季节对这些文件重新编号,以便在 Plex 中正确拾取它们。以下是“Season 2”文件夹当前的示例(前 5 个文件):
'Show Name - 014 Episode Title 1 [480p] [x265].mkv'
'Show Name - 015 Episode Title 2 [480p] [x265].mkv'
'Show Name - 016 Episode Title 3 [480p] [x265].mkv'
'Show Name - 017 Episode Title 4 [480p] [x265].mkv'
'Show Name - 018 Episode Title 5 [480p] [x265].mkv'
等等。
正如您所看到的,赛季开始编号为 14,而不是 1。首先,我使用 Nautilus 的重命名工具将 替换- 0
为S02E
。现在看起来是这样的:
anon@anonpc:~/Downloads/sandbox$ ls
'Show Name S02E14 Episode Title 1 [480p] [x265].mkv'
'Show Name S02E15 Episode Title 2 [480p] [x265].mkv'
'Show Name S02E16 Episode Title 3 [480p] [x265].mkv'
'Show Name S02E17 Episode Title 4 [480p] [x265].mkv'
'Show Name S02E18 Episode Title 5 [480p] [x265].mkv'
但我需要以 01 开头的剧集编号。这是我想出的最接近的:
for i in {14..18}; do mv Show\ Name\ S02E$i*.mkv Show\ Name\ S02E$((i-13))*; done
但这不能正常工作:
mv: target 'Show Name S02E18 Episode Title 5 [480p] [x265].mkv' is not a directory
现在看起来像这样:
anon@anonpc:~/Downloads/sandbox$ ls
'Show Name S02E14 Episode Title 1 [480p] [x265].mkv'
'Show Name S02E2*'
'Show Name S02E3*'
'Show Name S02E4*'
'Show Name S02E5*'
您可以看到第一个通配符*
可用于获取完整的文件名,但在对mv
文件重新编号时不会考虑其余的通配符。另外,我不知道为什么列表中的第一项没有被重命名。
我想知道如何以上述方式对文件重新编号,同时保留整数两侧的原始文件名。我使用 Ubuntu 22.04 和默认的 bash shell。谢谢
Bash 全局匹配仅适用于现有文件。在这种情况下,您可以只使用 Bash 前缀删除 (
${variable#prefix_to_remove}
) 来指定您想要的重命名目的地:测试运行:
您可以使用 GNU
sort
或 GNU中的版本控制排序选项ls
,如下rename
所示:... 或者:
([^\d]+)
是非数字的捕获组,([\d]+)
仅适用于数字$1
,$2
, ,$3
... 等是它们的参考数字...您可能需要根据文件名中的字符模式调整这些数字。请注意,如果您的文件名中包含换行符,这些操作将会失败。
-n
的选项用于rename
空运行模式(文件系统上不会发生实际的文件重命名)...因此,尝试这些,如果您同意输出,则再次重新运行,而不需要像这样的演示的-n
选项:rename
这样做的好处是可以自动处理任何任意/变化的编号序列,并且仍然将它们重命名为从原始排序状态开始
1
并基于其原始排序状态的顺序编号。