我有一些文件,這些文件在「1.1' 結尾,例如:如何在Linux/Unix中將多個文件從一個擴展名重命名爲另一個擴展名?
example.file.ex1.1
example.file.ex2.1
example.file.ex3.1
有沒有一種方法,我可以快速重命名他們都沒有在最後的」 1.1' (如例子.file.ex1,example.file.ex2等)?
謝謝!
我有一些文件,這些文件在「1.1' 結尾,例如:如何在Linux/Unix中將多個文件從一個擴展名重命名爲另一個擴展名?
example.file.ex1.1
example.file.ex2.1
example.file.ex3.1
有沒有一種方法,我可以快速重命名他們都沒有在最後的」 1.1' (如例子.file.ex1,example.file.ex2等)?
謝謝!
純bash的解決方案:
for curFile in example.file.*.1; do
mv -- "$curFile" "${curFile:0:-2}"
done
是的,試試這個與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的的爸爸寫的。
你能否解釋爲什麼默認的''rename''在Ubuntu或Debian上不起作用?似乎運行''/ usr/bin/rename -n's/.1 //'*''正在爲我工作,而默認重命名不會。我只是不明白它,都允許perl表達式,但一個作品,另一個不。有什麼不同? –
默認重命名應該適用於Ubuntu/Debian –
是啊!你是對的。我的壞 –
另一個bash解決方案使用parameter expansion:
for curFile in example.file.*.1; do
mv "$curFile" "${curFile%.1}"
done
謝謝!它的工作原理: f = file.zip; echo $ {f%.zip}# - > file –
這個問題似乎是題外話,因爲它更適合[UNIX和Linux(http://unix.stackexchange.com/) –
所有偉大的答案。謝謝! – user2716340
嘗試,但顯然我沒有足夠的「聲譽」。 =) – user2716340