Shell

我們如何重命名帶有分號的文件作為文件名的一部分?

  • February 7, 2014

我試圖將所有副檔名為“XLS;1”的文件重命名為“XLS”,但它不起作用。

我在 windows xp 的 cygwin 中嘗試了以下操作,但它們不起作用:

mv *.XLS;1 *.XLS

mv *.XLS\;1 *.XLS

mv "*.XLS;1" *.XLS

問題不在於分號,您的第二個範例會解決這個問題。問題是 Linux/Unix 實用程序(以及擴展的 Cygwin)並沒有像我理解的 Windows 那樣將該指令表示為“移動所有.XLS;1以. 結尾的文件”。.XLS您需要單獨移動每個文件:

for file in *.XLS\;1; do 
   mv "$file" "${file%;1}"
done

一個解釋:

這會將所有以 結尾的文件.XLS;1一次儲存到一個名為$file. 對於每個文件,我們告訴它$file通過;1切掉$file.

注意對於那些使用 zsh 的人,有一個很好的實用程序叫做zmv

zmv '(*).XLS;1" "$1.XLS"

根據您的設置,您可能需要先執行autoload zmv(也將其放入 .zshrc 中)。

引用自:https://unix.stackexchange.com/questions/33193