Linux 重命名命令,用于从某一点(字符)替换文件名中的文本,但最多只能替换并保留文件扩展名

Linux 重命名命令,用于从某一点(字符)替换文件名中的文本,但最多只能替换并保留文件扩展名,linux,command,file-rename,batch-rename,Linux,Command,File Rename,Batch Rename,我有一大堆文件,如下所示 audiofile_drums_1-ktpcwybsh5c.wav soundsample_drums_2-fghlkjy57sa.wav noise_snippet_guitar_5-mxjtgqta3o1.wav louder_flute_9-mdlsiqpfj6c.wav 我想删除介于“-”和.wav文件扩展名之间的所有内容,并保留它们 audiofile_drums_1.wav soundsample_drums_2.wav noise_snippet_gui

我有一大堆文件,如下所示

audiofile_drums_1-ktpcwybsh5c.wav
soundsample_drums_2-fghlkjy57sa.wav
noise_snippet_guitar_5-mxjtgqta3o1.wav
louder_flute_9-mdlsiqpfj6c.wav
我想删除介于“-”和.wav文件扩展名之间的所有内容,并保留它们

audiofile_drums_1.wav
soundsample_drums_2.wav
noise_snippet_guitar_5.wav
louder_flute_9.wav
我已经尝试使用删除字符“-”之后的所有内容

这让我

audiofile_drums_1
soundsample_drums_2
noise_snippet_guitar_5
louder_flute_9
由于找不到一种简单的方法来重新命名所有文件,添加.wav扩展名,我希望有一种更灵活的方法,可以在一个阶段中使用一个漂亮的命令,而不是2个

有什么建议吗


谢谢

您可以使用
重命名的/-[^\.]*\.wav$/\.wav/'*

第一部分
-[^\.]*\.wav$
搜索a-,后跟n个非
字符,后跟
.wav
和文件名末尾。文件名结尾和
.wav
不是严格需要的,但它有助于避免重命名不想重命名的文件

/\.wav/
保留扩展名


请注意,
rename
不是一个标准实用程序,并且是perl的一部分,因此,
rename
可能在每个linux系统上都不可用。

这在我的特定情况下有效,但应该适用于任何文件扩展名

rename -n 's/-.*(?=\.wav$)//' *
该命令查找文件名中
-
符号之后的所有字符,然后使用正向前瞻**
(?=\.wav$)
搜索文件名末尾的字符(本例中的文件扩展名)(由
$
表示),并将其替换为无字符(删除它们)

**注意:正面展望是零宽度断言。 这会影响比赛,但不会包括在内 在替换中。(将不使用“.wav”部分。) 删除)


在本例中,
(?=\.wav$)
是正向的前瞻。美元符号$在正则表达式中表示在行的末尾,非常适合作为文件扩展名。

欢迎使用stackoverflow。请不要包括“谢谢”或者类似的问题。请参见这里:meta.stackexchange.com/questions/2950/…和这里:meta.stackoverflow.com/questions/288160/no-Thank-damn-it了解更多信息。在看到您的答案之前,我想出了另一种类似的方法,这种方法非常有效,它保留了扩展,但也可以用来替换找到的c如果需要,请输入字符字符串。对任何您认为有用的答案进行投票,并接受“最佳”答案。我通常会说您最终使用的答案是“最佳”。
rename -n 's/-.*(?=\.wav$)//' *