递归地从电影文件名中删除日期而不使用重命名

递归地从电影文件名中删除日期而不使用重命名

我有一个目录“Movies”,其中包含“Gone with the Wind”等单独目录和“Gone with the Wind (1939).mp4”等文件名

我想重命名它们,删除“(1939)”部分,所以结果是“Gone with the Wind.mp4”

在 osx 上,我可以通过重命名来做到这一点,如下所示:

rename 's/ \(.*?\)//' *.mp4

不使用重命名如何做到这一点?

答案1

rename命令不复制文件:

touch 'Gone with the Wind (1939).mp4'

ls -li Gone*.mp4
129371 -rw-r--r-- 1 roaima roaima 0 Dec 14 14:33 Gone with the Wind (1939).mp4

rename 's/\s*\(\d{4}\)//' Gone*.mp4

ls -li Gone*.mp4
129371 -rw-r--r-- 1 roaima roaima 0 Dec 14 14:33 Gone with the Wind.mp4

inode 号保持不变,表明它仍然是同一个文件

答案2

由于您似乎使用的是 Macos,因此您的 shell 很可能是zsh,因此您应该能够执行以下操作:

autoload -Uz zmv
zmv -n '(**/)(*)[[:space:]]##\(<1800-2022>\)(.mp4)' '$1$2$3'

(删除 -nfor试运行如果愿意,可以将任意 4 位数字替换<1800-2022>[0-9](#c4),而不是数字范围)。

而不是使用rename.

zmv, 喜欢perlrename 重命名文件,它不会复制它们,尽管在rename使用rename()perl 函数调用rename()下面的系统调用时,只要源和目标位于同一文件系统上,zmv就只调用mv将调用的函数。rename()


¹ 您可以使用though-C选项来代替zmvcpmv

相关内容