我尝试将扩展名为“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