重命名命令用于替换文件名中从某一点(字符)开始的文本,但只到文件扩展名,并保持文件扩展名。

问题描述 投票:1回答:2

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

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。

有什么建议吗?

有什么建议吗?

linux command file-rename batch-rename
2个回答
1
投票

你可以使用 rename 's/-[^\.]*\.wav$/\.wav/' *

第一部分 -[^\.]*\.wav$ 搜索a-后面的n个字符,这些字符不是 . 其次 .wav 和文件名的结尾。文件名的结尾和 .wav 并非严格意义上的需要,但它有助于避免重命名您不想重命名的文件。

/\.wav/ 保留扩展。

请不要 rename 不是一个标准的实用工具,是perl的一部分,所以 rename 并非每个linux系统都能使用。


1
投票

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

rename -n 's/-.*(?=\.wav$)//' *

该命令将查找所有在 - 符号,然后,使用一个正向的看前**。(?=\.wav$) 来搜索文件名末尾的字符(在本例中是文件扩展名)(用 $并将其替换为无字符(删除)。

** 注意:正向展望是一个零宽度的断言,它将影响比赛,但不包括在替换中。 正向展望是一个零宽度的断言,它将影响匹配,但不会被包含在替换中。('.wav'部分不会被替换)

在这个例子中 (?=\.wav$) 是正数的看头。 美元符号$,就像在regex中一样,表示在行末,所以非常适合文件扩展名。

© www.soinside.com 2019 - 2024. All rights reserved.