2013-08-25 129 views
8

我有一些文件,這些文件在「1.1' 結尾,例如:如何在Linux/Unix中將多個文件從一個擴展名重命名爲另一個擴展名?

example.file.ex1.1 
example.file.ex2.1 
example.file.ex3.1 

有沒有一種方法,我可以快速重命名他們都沒有在最後的」 1.1' (如例子.file.ex1,example.file.ex2等)?

謝謝!

+3

這個問題似乎是題外話,因爲它更適合[UNIX和Linux(http://unix.stackexchange.com/) –

+0

所有偉大的答案。謝謝! – user2716340

+2

嘗試,但顯然我沒有足夠的「聲譽」。 =) – user2716340

回答

5

純bash的解決方案:

for curFile in example.file.*.1; do 
    mv -- "$curFile" "${curFile:0:-2}" 
done 
12

是的,試試這個與rename

rename -n 's/\.1$//' * 

刪除-n(乾式運行模式切換),如果你的測試是有效的。

warning http://pix.toile-libre.org/upload/original/1377510865.png還有其他的工具,這可能會或可能無法做到這一點,所以要小心相同的名稱。


如果您運行以下命令(linux

$ file $(readlink -f $(type -p rename)) 

和你有一個像

.../rename: Perl script, ASCII text executable 

那麼這似乎是正確的工具=結果)

如果沒有,要做到這一點在Debian默認(通常已經是這樣了)和微分像Ubuntu

$ sudo update-alternatives --set rename /path/to/rename 

最後但並非最不重要的,該工具最初是由Larry Wall,Perl的的爸爸寫的。

+0

你能否解釋爲什麼默認的''rename''在Ubuntu或Debian上不起作用?似乎運行''/ usr/bin/rename -n's/.1 //'*''正在爲我工​​作,而默認重命名不會。我只是不明白它,都允許perl表達式,但一個作品,另一個不。有什麼不同? –

+0

默認重命名應該適用於Ubuntu/Debian –

+0

是啊!你是對的。我的壞 –

3

另一個解決方案使用parameter expansion

for curFile in example.file.*.1; do 
    mv "$curFile" "${curFile%.1}" 
done 
+0

謝謝!它的工作原理: f = file.zip; echo $ {f%.zip}# - > file –

相關問題