我的Unix机器上有一些文件以
--
例如 --testings.html
如果尝试删除它,则会出现以下错误:
cb0$ rm --testings.html
rm: illegal option -- -
usage: rm [-f | -i] [-dPRrvW] file ...
unlink file
我试过了
rm "--testings.html" || rm '--testings.html'
但没有任何效果。
如何在终端上删除此类文件?
Answers:
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
它将始终有效,因为这样您的参数就永远不会以开头-。
此外,如果您要制作真正体面的Shell脚本,请参阅。从技术上讲,您应该将./所有文件名参数扩展放在最前面,以防止脚本由于文件名输入的时髦而损坏(或防止脚本被滥用/利用来执行不应做的事情:例如,rm将删除文件但是跳过目录;同时rm -rf *会删除所有内容。将“ -rf”文件名传递给脚本或某人touch ~victim/-rf的ing可能会以这种方式用于更改其行为,从而带来严重的后果。
另一方法是使用find ... -name“-*” -delete
touch -- --file
find -x . -mindepth 1 -maxdepth 1 -name "--*" -delete
对于删除文件名中包含不可能的字符的文件的更通用方法,一种选择是使用文件的inode。
可以通过获取 ls -i。
例如
$ ls -lai | grep -i test
452998712 -rw-r--r-- 1 dim dim 6 2009-05-22 21:50 --testings.html
并在find的帮助下擦除它:
$ find ./ -inum 452998712 -exec rm \{\} \;
当处理大量具有文件名特性的文件时,此过程可能会很有用,因为它很容易编写脚本。
rm使用参数调用./--testings.html。只需rm ./--testings.html直接键入会更容易-这也不需要遍历整个目录树。(您可以通过使用来避免后者-maxdepth 1。)