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

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

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

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

mv *.XLS;1 *.XLS

mv *.XLS\;1 *.XLS

mv "*.XLS;1" *.XLS

答案1

问题不在于分号,你的第二个例子可以解决这个问题。问题是 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 中)。

答案2

您可以通过索引节点移动。

找到索引节点

ls -i 

使用您刚刚找到的索引节点

find . -inum <you just found> -exec mv {} <new name> \;

这应该可以在 UNIX 系统上运行。对cygwin一无所知。

答案3

西格温有实用程序Linux包装内含rename

rename ".XLS;1" ".XLS" *.XLS\;1

或者,如果文件名中没有其他分号,则这样就足够了:

rename ";1" "" *.XLS\;1

相关内容