![rm + 如何删除带有特殊字符的文件](https://linux22.com/image/611067/rm%20%2B%20%E5%A6%82%E4%BD%95%E5%88%A0%E9%99%A4%E5%B8%A6%E6%9C%89%E7%89%B9%E6%AE%8A%E5%AD%97%E7%AC%A6%E7%9A%84%E6%96%87%E4%BB%B6.png)
我的 Linux 机器上有这个文件:
----------9976723563nneh4_-----192.9.200.4
我尝试删除此文件,但是却无法删除,正如这里所看到的:
为了删除这个文件,需要向 rm 添加什么?
rm "----------9976723563nneh4_-----192.9.200.4"
rm: illegal option -- --------9976723563nneh4_-----192.9.200.4
usage: rm [-fiRr] file ...
。
rm '----------9976723563nneh4_-----192.9.200.4'
rm: illegal option -- --------9976723563nneh4_-----192.9.200.4
usage: rm [-fiRr] file ...
答案1
rm -- ----------9976723563nneh4_-----192.9.200.4
您需要--
告诉rm
(或多或少所有其他 GNU 软件)所有后续参数都是文件名,即使以“-”开头也是如此。否则(在您的例子中)文件名会与选项混淆。另一种可能性是
rm ./----------9976723563nneh4_-----192.9.200.4
编辑1
将这个微不足道的答案称为“绝佳解决方案”让我感到有义务将其提升到更高的水平。基本问题无法“更好”地解决,但您可以尝试习惯于始终进行--
争论。一些 shell 代码(用 shell 函数替换 rm)可以帮助您实现这一点:
rm () {
local args sep_found=no
args=("$@")
while [ $# -gt 0 ]; do
if [ "--" = "$1" ]; then
sep_found=yes
break
fi
shift
done
if [ "yes" = "$sep_found" ]; then
command rm "${args[@]}"
else
echo "WARNING: rm called without '--' seperator."
echo "Please correct the command; aborting."
fi
}
你可以把它放在例如~/.bashrc
。
答案2
来自的手册页rm
:
要删除名称以“-”开头的文件(例如“-foo”),请使用以下命令之一:
rm---foo
rm./-foo
要删除您的文件,请尝试rm -- ----------9976723563nneh4_-----192.9.200.4
。