2014-08-29 42 views
0

我已经命名了一些文件,如下:删除文件名中的模式

e2ed150l145l245St01-Oxs_MinDriver-Magnetization-00-0002105.omf 
e2ed150l145l250St01-Oxs_MinDriver-Magnetization-00-0002167.omf 
e2ed150l145l255St01-Oxs_MinDriver-Magnetization-00-0001519.omf 
e2ed150l145l260St01-Oxs_MinDriver-Magnetization-00-0001841.omf 
e2ed150l145l265St01-Oxs_MinDriver-Magnetization-00-0002730.omf 
e2ed150l145l270St01-Oxs_MinDriver-Magnetization-00-0002788.omf 
e2ed150l145l275St01-Oxs_MinDriver-Magnetization-00-0001616.omf 
e2ed150l150l250St01-Oxs_MinDriver-Magnetization-00-0002386.omf 
e2ed150l150l2100St01-Oxs_MinDriver-Magnetization-00-0015577.omf 

我想将它们重新命名为:

e2ed150l145l245St01.omf 
e2ed150l145l250St01.omf 
e2ed150l145l255St01.omf 
e2ed150l145l260St01.omf 
e2ed150l145l265St01.omf 
e2ed150l145l270St01.omf 
e2ed150l145l275St01.omf 
e2ed150l150l250St01.omf 
e2ed150l150l2100St01.omf 

经过一些我用了几个命令,其中包括类似论坛的:

rename 's/-Oxs_MinDriver-Magnetization-00-[0-9]*//g' e2e*.omf -v 

但它没有奏效。请指教。

+0

它适合我。 – Barmar 2014-08-29 01:43:01

回答

1

您还可以使用mv还有:

for i in e2e*.omf; do 
    mv $i ${i%%-*}.omf 
done 

for i in e2e*.omf; do 
    mv $i ${i//-*/}.omf 
done 

要合为一条直线:

for i in e2e*.omf; do mv $i ${i%%-*}.omf; done 

如果目标已经存在使用mv -f

+0

它的工作原理。但我不知道如何。 {i %% - *}在这里意味着什么? – DKS 2014-08-29 03:05:34

+0

这是**参数扩展**的一部分,用于**子串提取**。 bash中最方便的部分之一。 '$ {var ## * x}'表示**从左边**开始并移除所有内容,直至并包括'x'。 (仅在第一次使用时使用'#')。 '$ {var %% x *}'是相同的,但**在右边**开始。 (**注意:** * *如何改变位置)对于一个'%',同样的音符。第二种形式'$ {var // x * /}'是**子串替换**。这里说找到'x *'并用**替换**。真正的形式是'$ {var // x/y /}'。由于'y'不是什么 - 隐含的'/'是隐含的。 HTH – 2014-08-29 03:24:12

+0

感谢您的澄清。 – DKS 2014-09-03 03:48:52