我的Unix机器上有一些文件开头
--
例如 --testings.html
如果我尝试删除它,我会收到以下错误:
cb0$ rm --testings.html rm: illegal option -- - usage: rm [-f | -i] [-dPRrvW] file ... unlink file
我试过了
rm "--testings.html" || rm '--testings.html'
但没有任何作用.
如何在终端上删除这些文件?
rm -- --testings.html
该--
选项告诉rm将所有其他参数视为文件名,而不是选项,即使它们以-
.
这不是rm命令特有的.getopt函数实现了它,并且许多(所有?)UNIX样式的命令以相同的方式处理它:--
终止选项处理,以及它之后的任何常规参数.
http://www.gnu.org/software/hello/manual/libc/Using-Getopt.html#Using-Getopt
rm -- --somefile
虽然这有效,但它是一种依赖于rm
使用getopts来解析其选项的解决方案.有些应用程序可以进行自己的解析,也会对此进行解释(因为它们可能不一定实现" --
选项结束"逻辑).
因此,您应该通过头骨驾驶的解决方案是:
rm ./--somefile
它总会有效,因为这样你的论证永远不会以a开头-
.
而且,如果你想要制作非常好的shell脚本; 你应该在技术上放在./
你所有的文件名参数扩展前面,以防止你的脚本因文件名输入而破坏(或者防止它们被滥用/利用来做他们不应该做的事情:例如,rm
会删除文件但跳过目录;同时rm -rf *
删除所有内容.将" -rf
" 的文件名传递给脚本或某人touch ~victim/-rf
可以通过这种方式来改变其行为并带来非常糟糕的后果.
无论是rm -- --testings.html
或rm ./--testings.html
.
rm -- --testings.html