2016-04-14 55 views
1

請任何人。Linux - 通過用'##'替換最後的連字符來重命名所有文件

我如何在Linux中重命名像一堆文件:

abc-def-0001.xxx 
acb-def-0002.xxx

到:

abc-def##0001.xxx 
...

我試圖從SO喜歡幾點建議:

rename 's/(.*)-/$1##/' *.xxx

但沒在我的環境中沒有按預期工作。

+3

什麼是「它不工作」是什麼意思? –

+0

沒有文件被重命名。 – Fuhrmann

+0

那麼你的環境是什麼?在我的'bash'你的命令工作正常。 –

回答

0

所以我最終使用:

for i in *; do mv "$i" "`echo $i | sed "s/\(.*\)-/\1##/"`"; done

我覺得我的版本重命名命令不支持perl的表情......

2

你可以在你的正則表達式使用前瞻:

rename -n 's/-(?=\d)/##/' *.xxx 

這將匹配&代替後跟一個數字第一_

但是你的模式's/(.*)-/$1##/'也適用於給定的例子,但是這個假設你總是替換最後一個下劃線。

+0

測試此命令後不要忘記取出'-n'。 – anubhava

+0

不要忘記,創建包含'#'等字符的文件名的人將面臨永恆的詛咒...雖然允許,但某些字符(#,%,\,空格,....)是在其他情況下使用太多,你只是在招惹麻煩。 – user1934428

相關問題