编辑:我最初的目标是在Pro Tools的“批量重命名”对话框中使用正则表达式。Pro Tools中的正则表达式不支持这样具体的东西。问题已经转移到如何通过使用Automator应用程序和Run Shell脚本命令在Finder中批量重命名文件来实现以下目标。
原问题:
我想在支持使用正则表达式(Pro Tools)批量重命名的程序中批量重命名许多项目。我需要在"Find“和" replace”字段中输入什么,才能用顺序编号(1、2、3等)替换所有文本_rr。它会在每次_rr之前的字符串更改时重新启动吗?
我已经找到了Find:_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哪个正则表达式会产生以下结果?
Casio AA_12_Test_A3_rr1
Casio AA_12_Test_A3_rr2
Casio AA_12_Test_A4_rr1
Casio AA_12_Test_A4_rr2
Casio AA_12_Test_A4_rr3
Casio AA_12_Test_B5_lng_rr1
Casio AA_12_Test_B5_lng_rr2
Casio AA_12_Test_B5_sht_rr1
Casio AA_12_Test_B5_sht_rr2
Casio AA_12_Test_E4_sht_rr1
Casio AA_12_Test_E4_sht_rr2
Casio AA_12_Test_E5_sht_rr1
Casio AA_12_Test_E5_sht_rr2
Casio AA_12_Test_F5_lng_rr1
Casio AA_12_Test_G4_lng_rr1发布于 2021-04-01 06:12:53
我不认为Pro Tools的“批量重命名”功能能够完成您想要的计数。
您提到将automator与shell脚本一起使用。将"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。
undo script
echo创建(希望是唯一的)名称undo script
chmod - initialise undo script
chmod-创建undo脚本executable
sort -确保文件名列表(从标准输入中读取)在order
-F_rr_中-告诉awk在_rr_
q(s)上拆分输入记录-单引号s,以确保当传递给shell
!a[$1]++时,奇数字符不会导致问题-常见的惯用法,仅在第一次看到特定的$1时匹配。此处用于重置计数器重命名-仅在文件名包含重命名时执行操作(如果未包含,重命名将为empty
split -查找文件扩展名,存储在数组元素a[2]
if(a[2])...中-如果找到文件扩展名,则初始化ext
print(...) >> undo -追加撤消命令以撤消script
print(...) -生成实际的_rr_命令要实际重命名文件,请用system替换第二个print。
当从finder双击时,MacOS似乎很关心这个扩展。This answer表示带有.command扩展名的可执行脚本将在终端窗口中运行。
https://stackoverflow.com/questions/66879839
复制相似问题