【发布时间】:2018-10-19 12:36:47
【问题描述】:
我想匹配\d\dQ\d 模式或\dQ\d\d 模式并在文件名前面重新格式化。使用 OSX 终端或 ruby,最好的方法是什么?它有点复杂,因为它是模式 1 或模式 2。
在第一个文件中,例如模式“3Q17”是一个日期,表示 2017 年第三季度。我需要在文件名前添加 2017Q3。但是,我有另一个模式“05Q1”,表示 2005 年第一季度,所以我需要添加 2005Q1。
文件:
ABC-EDFGH-JLG-Sample-3Q17-fIS.pdf
^^^^
2Q13 ABC MF PM Example_fIS.pdf
^^^^
03Q1_FIS.pdf
^^^^
05Q1 ABC_IS.pdf
^^^^
文件重命名:
2017Q3_ABC-EDFGH-JLG-Sample-3Q17-fIS.pdf
2013Q2_2Q13 ABC MF PM Example_fIS.pdf
2003Q1_03Q1_FIS.pdf
2005Q1_05Q1 ABC_IS.pdf
这个问题对单个模式有帮助,但对两个模式没有帮助。
mac os x terminal batch rename
我的 ruby 代码运行良好:
Dir.glob("*.pdf").each do |orig_name|
new_name = orig_name.gsub(/^.*?(?:(\d\d)Q(\d)|(\d)Q(\d\d))/, '20\1\4Q\2\3_\0')
File.rename(orig_name, new_name)
end
但是,我在终端中的重命名脚本(使用 brew install rename)提供了错误的结果。
rename -n -e 's/^.*?(?:(\d\d)Q(\d)|(\d)Q(\d\d))/'20\1\4Q\2\3_\0'/' *.pdf
'03Q1_FIS.pdf' would be renamed to '2014Q23_0_FIS.pdf'
'03Q1_vIS.pdf' would be renamed to '2014Q23_0_vIS.pdf'
'05Q1 ABC_IS.pdf' would be renamed to '2014Q23_0 ABC_IS.pdf'
'2Q13 ABC MF PM Example_fIS.pdf' would be renamed to '2014Q23_0 ABC MF PM Example_fIS.pdf'
【问题讨论】:
-
所以您知道解决方案但正在寻找最合适的方法?
-
我知道一个解决方案,从这里为一个模式,但不是两个
-
请详细说明预期输出。目前很难捕捉。
-
@revo 以上更新
-
你试过什么?我们这里的大多数人都很乐意帮助你提高你的手艺,但作为短期无偿编程人员不太乐意。在MCVE 中向我们展示您迄今为止的工作、您期望的结果以及您得到的结果,我们将帮助您解决问题。
标签: ruby regex macos terminal batch-rename