我有一个目录“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'
(删除 -n
for试运行如果愿意,可以将任意 4 位数字替换<1800-2022>
为[0-9](#c4)
,而不是数字范围)。
而不是使用rename
.
zmv
, 喜欢perl
的rename
重命名文件,它不会复制它们,尽管在rename
使用rename()
perl 函数调用rename()
下面的系统调用时,只要源和目标位于同一文件系统上,zmv
就只调用mv
将调用的函数。rename()
¹ 您可以使用though-C
选项来代替zmv
cp
mv