我们如何用分号作为文件名的一部分重命名文件?

lam*_*988 1 shell cygwin quoting wildcards rename

我试图将所有扩展名为“XLS;1”的文件重命名为“XLS”,但它不起作用。

我在 windows xp 中的 cygwin 中尝试了以下操作,但它们不起作用:

mv *.XLS;1 *.XLS

mv *.XLS\;1 *.XLS

mv "*.XLS;1" *.XLS
Run Code Online (Sandbox Code Playgroud)

Kev*_*vin 5

问题不在于分号,你的第二个例子会解决这个问题。问题是,的Linux / Unix工具(以及由此延伸,Cygwin的)不采取该指令是指“在移动结尾的文件.XLS;1.XLS,”我了解的Windows一样。您需要单独移动每个文件:

for file in *.XLS\;1; do 
    mv "$file" "${file%;1}"
done
Run Code Online (Sandbox Code Playgroud)

一个解释:

.XLS;1会将所有以$file. 对于每个文件,我们告诉它$file通过;1切掉$file.

Nb 对于那些使用 zsh 的人,有一个很好的实用程序叫做zmv

zmv '(*).XLS;1" "$1.XLS"
Run Code Online (Sandbox Code Playgroud)

根据您的设置,您可能需要先运行autoload zmv(也将其放入 .zshrc 中)。