![将 10 位数字移动到文件名开头](https://linux22.com/image/1170956/%E5%B0%86%2010%20%E4%BD%8D%E6%95%B0%E5%AD%97%E7%A7%BB%E5%8A%A8%E5%88%B0%E6%96%87%E4%BB%B6%E5%90%8D%E5%BC%80%E5%A4%B4.png)
我有数千个文件需要重命名。它们都包含一个以“42469”开头的 10 位数字。我需要将每个文件中的这 10 位数字移到文件名的开头并添加下划线。示例:
Original - HOLZHEAUSER GAS UNIT_ 2_4246932863_2.pdf
Result - 4246932863_HOLZHEAUSER GAS UNIT_2_2.PDF
有人能帮我吗?提前谢谢您!
我并不是一个真正有经验的脚本用户/程序员,所以我的选择是在 Powershell 中执行此操作。我在 Powershell 中尝试了这两个建议,但没有任何成功。
答案1
使用韓國使用通配符匹配重命名文件:
$ touch 'HOLZHEAUSER GAS UNIT_ 2_4246932863_2.pdf'
$ mmv '*_ ?_*_?.*' '#3_#1_#2_#4.#u5'
$ ls
'4246932863_HOLZHEAUSER GAS UNIT_2_2.PDF'
答案2
您可以使用 perlrename
工具:
rename -n 's/(.*?)(\d{10}_)(.*?)/$2$1$3/' *
s/pattern/replacement/
表示用给定的替换替换与模式匹配的文本。与括号内的模式匹配的文本将被保存,并可分别使用$1
、$2
和在替换字符串中按所需顺序反向引用$3
。
注意,
-n
意思是:仅当您对结果满意时才No action: print names of files to be renamed, but don't rename.
删除运行操作。-n
答案3
你也可以使用 来完成此操作sed
。此命令应该可以准确执行你想要的操作:
ls | sed -r 's/(.*) 2_(42469)([0-9]+)_2(.*)/"&" "\2\3_\12_2\4"/' | xargs -L1 mv -v