我有一个38GB的文件夹,里面有800个mp4视频,重新下载后,文件名没有空格,所有单词都拼接了,但仍然是Title Case。
批量重命名最有效的方法是什么?
我记得很久以前我的发行版中包含一个“重命名”或“自动重命名”,但我现在似乎没有了。
我有一个38GB的文件夹,里面有800个mp4视频,重新下载后,文件名没有空格,所有单词都拼接了,但仍然是Title Case。
批量重命名最有效的方法是什么?
我记得很久以前我的发行版中包含一个“重命名”或“自动重命名”,但我现在似乎没有了。
最著名和最直观的批量重命名工具是 Perl 的
rename
. 它很像sed
类固醇(但尤其是重命名)。这是rename
Debian like OS 上的默认命令(与rpm
基于发行版的发行版不同)。经常命名
prename
或perl-rename
。它能够进行强大的正则表达式处理:如果你想在 mp4 文件名的每个“单词”之间添加空格:
当您的尝试令人满意时,请删除
-n
aka 。dry-run
replacement
例如,您甚至可以在部件中注入调用,例如使用修饰符sprintf "%03d", 9
进行零填充。e
你(不会|不会)在五分钟内学会 Perl
检查perl 关于重命名的文档
在某些发行版中还有另一种同名工具作为二进制文件使用。这
应该是这样的:
或者
如果您无法安装系统范围的软件包,则有 2 种方式作为普通(无
root
)用户:cpan -i File::Rename
(最好使用自制软件)**免责声明:如果您的文件包含连续的 Unicode UTF8 字符,例如
AaaÃééZzz.mp4
Unicode 部分将被忽略,请参阅下面的@Stéphane Chazelas 评论。一种解决方案是使用查看
我不知道什么是最有效的方法(我想你的意思是有效),但我会很快写一个 for 循环,如:
解释:
在哪里
sed
是“流编辑器”的名称;它接受输入,对其执行命令,然后产生输出。在这里,命令是s
,就像在“搜索和替换”中一样。要在标题中分隔单词,比如 for
FooBarBaz.mp4
to becomeFoo Bar Baz.mp4
,你可以在每个大写字母之前插入一个空格,除非它是文件名中的第一个字符,对于 zshzmv
你可以(递归地)这样做:-n
(如果高兴,请删除试运行)。当心它
Foo-Bar.mp4
变为Foo- Bar.mp4
.只会在字母和大写字母之间插入空格,但不适用于
OnceUponATime
上面的空格,因为空格会插入到 and 之间n
,A
但不会插入到 and 之间A
,T
因为前面的替换A
已经占用了。由于 zsh glob 没有相当于 perl 的环视操作符,因此解决这个问题更加困难。在这种情况下,一种简单的方法是多重复一次替换:
其他答案描述了允许基于正则表达式进行更改的工具,这是一种很好的方法。但是,这些答案并没有解决一个重点(恕我直言):在磁盘上实际进行更改之前的预览功能(这可能很难逆转)。
进入 Emacs 及其
dired
模式,特别是wdired
在手册中有记载。一个人会为包含文件的目录打开 dired,切换 wdired 以使文件名可编辑,进行更改 - 最有可能使用交互式正则表达式搜索和替换,查看更改,最后将它们提交到磁盘。我知道为这个用例安装 Emacs 是一种笨手笨脚的方法,但我要指出的是,它可以轻松处理包含困难字符(例如空格)的文件名。