OSX / MacOs 批量将十六进制文件名重命名为十进制文件名
OSX / MacOs batch rename hexadecimal filenames to decimal filenames
我想将名称中带有十六进制部分的文件名重命名为十进制。例如:MOV12B.MOD
、MOV12C.MOD
等。至MOV299.mod
、MOV300.MOD
。
这可以在终端中完成吗?
可以使用以下方法重命名扩展:
find . -name "*.MOD" -exec rename 's/\.MOD$/.MPG/' '{}' \;
但是如何将文件重命名为十进制?
当然,您可以使用 rename
,也称为 Perl rename
和 prename
,它最简单地安装在 macOS 上 homebrew 使用:
brew install rename
那么命令就是:
rename --dry-run 's/[0-9A-F]+/hex($&)/e' *MOD
示例输出
'MOV10.MOD' would be renamed to 'MOV16.MOD'
'MOV12B.MOD' would be renamed to 'MOV299.MOD'
'MOV12C.MOD' would be renamed to 'MOV300.MOD'
'MOVBEEF.MOD' would be renamed to 'MOV48879.MOD'
如果您喜欢它的功能,请删除 --dry-run
部分并真正做到。
无论如何,我建议您在尝试此操作之前进行备份,因为如果您的电影实际命名为 "Film 23.MOD"
而不是 "MOV12B.MOD"
,您将得到:
'Film 23.MOD' would be renamed to '15ilm 23.MOD'
如果你想把日期也放进去,你可以这样做:
rename --dry-run 's/[0-9A-F]+/hex($&)/e; s|.MOD| 17/01/2018.MOD|' *MOD
示例输出
'MOV12A.MOD' would be renamed to 'MOV298 17/01/2018.MOD'
为什么在手册页中找不到它?嗯,里面有一行随便说你可以通过一行Perl代码来修改名字。这意味着 完整的 Perl 语言 对你可用 - 所以你可以编写几页代码来访问数据库,运行 远程机器上的东西,或者获取 URL 以重命名您的文件。
我的代码中唯一棘手的事情是 e
潜伏在最后:
s/search/replace/e
e
表示 search/replace 的后半部分实际上是 执行的 所以它不是直接的文本替换,它是一个新程序从 $&
的左侧获取搜索字符串,并可以对其进行数学运算或查找。
我已经做了一些涉及类似技术的其他答案...
here,
here,
.
如果你想把文件的修改时间也放到它的名字中,你需要做更多的工作。首先,stat()
更改文件名之前的文件 ;-) 请记住,您在 $_
中收到原始文件名。然后做十六进制到十进制的事情,然后添加 mtime
。请记住 Perl 使用点将字符串连接在一起。
因此,命令将如下所示:
rename --dry-run 'my $mtime=(stat($_))[9]; s/[0-9A-F]+/hex($&) . " " . $mtime/e;' *MOD
示例输出
'MOV12A.MOD' would be renamed to 'MOV298 1516229449.MOD'
如果所有的替换和评估都太多了,你总是可以做你所有的计算并将结果分配给 Perl 的 $_
变量,通过它你接收到文件名并在其中传递所需的名称至 rename
。因此,举个例子:
rename --dry-run 'my $prefix="PREFIX "; my $middle=$_; my $suffix=" SUFFIX"; $_=$prefix . $middle . $suffix;' *MOD
'MOV12A.MOD' would be renamed to 'PREFIX MOV12A.MOD SUFFIX'
只有真正的程序员才会用十六进制名称存储他的电影 - 向你致敬!
我想将名称中带有十六进制部分的文件名重命名为十进制。例如:MOV12B.MOD
、MOV12C.MOD
等。至MOV299.mod
、MOV300.MOD
。
这可以在终端中完成吗?
可以使用以下方法重命名扩展:
find . -name "*.MOD" -exec rename 's/\.MOD$/.MPG/' '{}' \;
但是如何将文件重命名为十进制?
当然,您可以使用 rename
,也称为 Perl rename
和 prename
,它最简单地安装在 macOS 上 homebrew 使用:
brew install rename
那么命令就是:
rename --dry-run 's/[0-9A-F]+/hex($&)/e' *MOD
示例输出
'MOV10.MOD' would be renamed to 'MOV16.MOD'
'MOV12B.MOD' would be renamed to 'MOV299.MOD'
'MOV12C.MOD' would be renamed to 'MOV300.MOD'
'MOVBEEF.MOD' would be renamed to 'MOV48879.MOD'
如果您喜欢它的功能,请删除 --dry-run
部分并真正做到。
无论如何,我建议您在尝试此操作之前进行备份,因为如果您的电影实际命名为 "Film 23.MOD"
而不是 "MOV12B.MOD"
,您将得到:
'Film 23.MOD' would be renamed to '15ilm 23.MOD'
如果你想把日期也放进去,你可以这样做:
rename --dry-run 's/[0-9A-F]+/hex($&)/e; s|.MOD| 17/01/2018.MOD|' *MOD
示例输出
'MOV12A.MOD' would be renamed to 'MOV298 17/01/2018.MOD'
为什么在手册页中找不到它?嗯,里面有一行随便说你可以通过一行Perl代码来修改名字。这意味着 完整的 Perl 语言 对你可用 - 所以你可以编写几页代码来访问数据库,运行 远程机器上的东西,或者获取 URL 以重命名您的文件。
我的代码中唯一棘手的事情是 e
潜伏在最后:
s/search/replace/e
e
表示 search/replace 的后半部分实际上是 执行的 所以它不是直接的文本替换,它是一个新程序从 $&
的左侧获取搜索字符串,并可以对其进行数学运算或查找。
我已经做了一些涉及类似技术的其他答案...
here,
here,
如果你想把文件的修改时间也放到它的名字中,你需要做更多的工作。首先,stat()
更改文件名之前的文件 ;-) 请记住,您在 $_
中收到原始文件名。然后做十六进制到十进制的事情,然后添加 mtime
。请记住 Perl 使用点将字符串连接在一起。
因此,命令将如下所示:
rename --dry-run 'my $mtime=(stat($_))[9]; s/[0-9A-F]+/hex($&) . " " . $mtime/e;' *MOD
示例输出
'MOV12A.MOD' would be renamed to 'MOV298 1516229449.MOD'
如果所有的替换和评估都太多了,你总是可以做你所有的计算并将结果分配给 Perl 的 $_
变量,通过它你接收到文件名并在其中传递所需的名称至 rename
。因此,举个例子:
rename --dry-run 'my $prefix="PREFIX "; my $middle=$_; my $suffix=" SUFFIX"; $_=$prefix . $middle . $suffix;' *MOD
'MOV12A.MOD' would be renamed to 'PREFIX MOV12A.MOD SUFFIX'
只有真正的程序员才会用十六进制名称存储他的电影 - 向你致敬!