我有一大堆文件,如下所示
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
我试着删除"-"字后面的所有内容,包括用
rename 's/-.*//' *
这让我
audiofile_drums_1
soundsample_drums_2
noise_snippet_guitar_5
louder_flute_9
而且由于没有找到一个简单的方法来重新命名所有的文件,添加.wav的扩展名,我希望有一个更狡猾的方法,在一个阶段的一个nifty命令,而不是2。
有什么建议吗?
有什么建议吗?
你可以使用 rename 's/-[^\.]*\.wav$/\.wav/' *
第一部分 -[^\.]*\.wav$
搜索a-后面的n个字符,这些字符不是 .
其次 .wav
和文件名的结尾。文件名的结尾和 .wav
并非严格意义上的需要,但它有助于避免重命名您不想重命名的文件。
在 /\.wav/
保留扩展。
请不要 rename
不是一个标准的实用工具,是perl的一部分,所以 rename
并非每个linux系统都能使用。
这在我的特殊情况下有效,但应该适用于任何文件扩展名。
rename -n 's/-.*(?=\.wav$)//' *
该命令将查找所有在 -
符号,然后,使用一个正向的看前**。(?=\.wav$)
来搜索文件名末尾的字符(在本例中是文件扩展名)(用 $
并将其替换为无字符(删除)。
** 注意:正向展望是一个零宽度的断言,它将影响比赛,但不包括在替换中。 正向展望是一个零宽度的断言,它将影响匹配,但不会被包含在替换中。('.wav'部分不会被替换)
在这个例子中 (?=\.wav$)
是正数的看头。 美元符号$,就像在regex中一样,表示在行末,所以非常适合文件扩展名。