如何删除以双连字符开头的文件?

我的Unix机器上有一些文件

-- 

例如--testings.html

如果我尝试删除它,我得到以下错误:

 cb0$ rm --testings.html rm: illegal option -- - usage: rm [-f | -i] [-dPRrvW] file ... unlink file 

我试过了

 rm "--testings.html" || rm '--testings.html' 

但没有任何工作。

我怎样才能删除terminal上的这些文件?

 rm -- --testings.html 

--选项告诉rm将所有更多的参数视为文件名,而不是作为选项,即使它们以-开头。

这不是rm命令的特别之处。 getopt函数实现了它,许多(all?)UNIX样式的命令都以相同的方式处理它: --终止选项处理,任何后面的东西都是常规参数。

http://www.gnu.org/software/hello/manual/libc/Using-Getopt.html#Using-Getopt

 rm -- --somefile 

虽然这样做,这是一个解决scheme,依靠rm使用getoptsparsing其选项。 那里有一些应用程序可以自己parsing并且也会呕吐(因为它们可能不一定实现“ --意味着选项结束”逻辑)。

正因为如此,你应该通过你的头骨驾驶的解决scheme是这样的:

 rm ./--somefile 

它会一直工作,因为这样你的论点永远不会以-开头。

而且,如果你正在尝试制作真正体面的shell脚本, 您应该在技术上将./放在所有文件名参数扩展的前面,以防止由于时髦的文件名input而导致脚本中断(或防止他们被滥用/利用来做他们不应该做的事情:例如, rm将删除文件,但跳过目录,而rm -rf *将删除所有内容,将“ -rf ”的文件名传递给脚本,或者touch ~victim/-rf可以用来改变它的行为坏的后果)。

rm -- --testings.htmlrm ./--testings.html

 rm -- --testings.html 

另一种方法是使用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