我需要重命名目录中的文件,以删除每个文件都不同但启动方式相同的字符串。我知道如何从文件名中删除字符,但是如何保留扩展名?我知道这是一个常见问题的一种变体,但是我找不到适合我确切需求的答案。
Redshirts_ep6_dSBHpCsvQ3BfQ7-NNIjXYO4pnHpNMvu7bfvURLF3BSzB_3YOOrBBoNnICTR-hg.mp3
-> Redshirts.mp3
PathsNotTaken_ep6_XWixFER4PJyeozVfcxT96UajpnVI7cRMRhAU4Aj9-rpeacnBleuGY9zCPDe0aQ.mp3
-> PathsNotTaken.mp3
答案 0 :(得分:0)
Linux命令rename
在这里非常有用。它可以使用正则表达式执行重命名。
这可能可以重写一下,但是似乎可以完成以下任务:
rename -n 's/(^[^_]*)_.*/$1.mp3/' *.mp3
只需删除-n
标志即可运行。保留它只是一个测试。
此正则表达式说:
在行^
的开头不包含下划线[^_]
的字符重复了任意次数*
,并且被捕获到捕获组(^[^_]*)
中后跟一个下划线和任意数量的任何其他字符_.*
。然后,使用第一个捕获组$1
紧跟着.mp3