我的 Ubuntu 上有一个文件夹movies
,其中包含许多子文件夹。
每个子文件夹包含 1 个 mp4 文件,并且可能包含其他文件(jpg、srt)。
每个子文件夹具有相同的标题格式:
My Subfolder 1 (2001) Bla Bla
My Subfolder 2 (2000) Bla
My Subfolder 3 (1999)
如何将 mp4 文件重命名为与父文件夹相同但没有年份和 blabla?
例如,上面子文件夹中的 mp4 变为:
My Subfolder 1.mp4
My Subfolder 2.mp4
My Subfolder 3.mp4
我希望 mp4 留在他们的子文件夹中,只是他们的名字会被改变。年份总是在括号中。
这是一个 bash 解决方案:
这会遍历“movies”的每个子目录中的每个 mp4 文件,并对其应用模式匹配测试。如果匹配:
^
- 从一开始就(.*)
- 捕获任意数量的字符并将它们保存下来\ \(
- 后跟一个空格和一个左括号如果匹配成功,那么我们在具有您期望的模式的目录中找到了一个 mp4 文件。Bash 将带括号的匹配项保存在
$BASH_REMATCH
数组变量中,因此我们(将)mv
使用原始文件名和拼凑的新名称进行调用:${mp4%%/*}
是原始目录名称/
/ - 目录分隔符${BASH_REMATCH[1]}".mp4
- 上面保存的部分,后缀为.mp4
如果结果看起来正确,请删除
echo
和...to...
部分。使用
perl
重命名实用程序:如果您想试运行看看它会做什么,请使用
-n
(aka--nono
) 选项:在 Debian(和 Ubuntu 等)上,基于 perl 的重命名位于
file-rename
包中。它也可以被调用为prename
或file-rename
。顺便说一句,这个版本的重命名的一个非常有用的特性是,虽然它很容易对文件名进行样式转换
sed
或tr
样式转换,但您实际上可以使用任何修改$_
重命名文件的 perl 代码,包括复杂的脚本。从手册页:
请注意,还有其他版本
rename
具有完全不同的命令行选项和参数,包括util-linux
包中的一个(通常命名为/usr/bin/rename.ul
)。rename
在使用之前验证您安装了哪个版本很重要- 或者更准确地说,是哪个版本被调用或符号链接到/usr/bin/rename
在 Debian 和 Ubuntu 及相关系统上,您可以检查
update-alternatives
: