2016-03-31 41 views
1

我需要重命名數千個文件,現在我正在刪除前x個字符,但它可能是一個漫長的過程,因爲字符數需要刪除更改。如何從bash中的多個文件名刪除一個通用前綴模式

源文件被命名爲這樣的:

4023 - 23 - Animal, crocodile 4 legs.txt 
243 - 4 - Animal, dog 4 legs.txt 
5450 - 2 - Animal, bird 2 legs.txt 

改名爲:

Animal, crocodile 4 legs.txt 
Animal, dog 4 legs.txt 
Animal, bird 2 legs.txt 

現在看來,這將是之前出現「A」修剪一切最簡單的,但我不知道該怎麼做這個。可以用作bash腳本的循環會很棒。

回答

1

您可以使用bash parameter expansion

${VAR#*-*- }

通過模式刪除前綴。這是使用shell變量VAR中的文本,並基於刪除與通配符模式*-*-匹配的前綴來生成一個字符串 - 例如,那麼任何字符破折號那麼任何字符,然後第二個破折號和空間

爲了獲取文件名在一個循環中,你可以只使用一個bash for用圖案

​​

的報價是必要的在mv,以防止在文件名中的空白被分成多個參數由shell

+0

非常感謝,完美的作品。 – Juicee

0

您可以使用cut -d"-" -f3

for VAR in *-*-*.txt; do mv "$VAR" "`echo $VAR | cut -d'-' -f3 `"; done 

,或者忽略第一空間:

for VAR in *-*-*.txt; do mv "$VAR" "`echo $VAR | sed -e 's/^.*- //g'`"; done 
相關問題