如何解决如何批量重命名许多文件以添加顺序编号处理字符串,如果前面的文本更改,则重新启动?
编辑:我最初的目标是在 Pro Tools 的“批量重命名”对话框中使用正则表达式。 Pro Tools 中的正则表达式不支持这样的特定内容。问题已转移到如何通过使用 Automator 应用和 Run Shell Script 命令在 Finder 中批量重命名文件来实现以下目标。
原始问题:
我想在支持使用正则表达式(Pro Tools)批量重命名的程序中批量重命名许多项目。我需要在“查找”和“替换”字段中输入什么来用每次在 {{1} 之前的字符串重新开始的顺序编号(1、2、3 等)替换 _rr
之前的所有文本} 变化?
我已经了解了 Find: _rr
,但我不知道如何创建一个基于前面的文本模式/更改重新启动的数字序列。
举个具体的例子,拿这组数据:
_rr(.*)
什么正则表达式会产生以下结果?
Casio AA_12_Test_A3_rr_01-03
Casio AA_12_Test_A3_rr_01-04
Casio AA_12_Test_A4_rr_01-03
Casio AA_12_Test_A4_rr_01-05
Casio AA_12_Test_A4_rr_01-06
Casio AA_12_Test_B5_lng_rr_01-04
Casio AA_12_Test_B5_lng_rr_01-05
Casio AA_12_Test_B5_sht_rr_01-02
Casio AA_12_Test_B5_sht_rr_01-05
Casio AA_12_Test_E4_sht_rr_01-02
Casio AA_12_Test_E4_sht_rr_01-07
Casio AA_12_Test_E5_sht_rr_01-04
Casio AA_12_Test_E5_sht_rr_01-05-01
Casio AA_12_Test_F5_lng_rr_01-05
Casio AA_12_Test_G4_lng_rr_01-04-01
解决方法
我认为 Pro Tools 的“批量重命名”功能无法完成您想要的计数。
您提到使用带有 shell 脚本的 automator。将“pass input”设置为“stdin”并创建如下脚本:
#!/bin/sh
dir="/somewhere/to/keep/undo/logs"
now=$(date +%Y%m%d%H%M%S.$$)
logfile="$dir/undo.$now.command"
echo '#!/bin/sh' >"$logfile"
chmod +x "$logfile"
sort | awk -F_rr_ -v undo="$logfile" '
function q(s,d){
d="\47"
gsub(d,"&\\\\&&",s)
return d s d
}
!a[$1]++{ i=1 }
$2{
src=q($0)
split($2,a,/^.*\./)
if(a[2])ext="."a[2]
dst=q($1"_rr"(i++)ext)
print("mv",dst,src) >> undo
print("mv "src" "dst)
}
'
这是未经测试的,因为我没有 Mac。
- 为撤销脚本创建(希望是唯一的)名称
-
echo
- 初始化撤销脚本 -
chmod
- 使撤销脚本可执行 -
sort
- 确保文件名列表(从标准输入读取)是有序的 -
-F_rr_
- 告诉 awk 在_rr_
上拆分输入记录
-
q(s)
- 单引号s
以确保奇数字符在传递给 shell 时不会引起问题 -
!a[$1]++
- 仅匹配第一次看到特定$1
的常见习语。此处用于重置计数器i
-
$2{
- 只有在文件名包含_rr_
时才执行操作(如果没有,$2
将为空 -
split
- 查找文件扩展名,存储在数组元素a[2]
-
if(a[2])...
- 如果找到文件扩展名,初始化ext
-
print(...) >> undo
- 将撤销命令附加到撤销脚本 -
print(...)
- 生成实际的重命名命令
要真正重命名文件,请将第二个 print
替换为 system
。
MacOS 似乎在从 finder 双击时关心扩展名。 This answer 表示带有 .command
扩展名的可执行脚本将在终端窗口中运行。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。