2014-08-29 50 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