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

时间:2009-04-01 15:57:40

标签: bash unix filenames

我的Unix机器上有一些以

开头的文件
 --

e.g。 --testings.html

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

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

我试过

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

但没有任何作用。

如何在终端上删除此类文件?

7 个答案:

答案 0 :(得分:141)

rm -- --testings.html

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

这不是rm命令特有的。 getopt函数实现了它,并且许多(所有?)UNIX样式命令以相同的方式处理它:--终止选项处理,以及它之后的任何内容都是常规参数。

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

答案 1 :(得分:55)

rm -- --somefile

虽然这有效,但它是一个依赖rm使用getopts解析其选项的解决方案。有些应用程序可以自己进行解析并且也会对此进行解释(因为它们可能不一定实现“--意味着结束选项”逻辑)。

因此,你应该通过头骨开车的解决方案是:

rm ./--somefile

它始终有效,因为这样你的参数永远不会以-开头。

此外,如果您正在尝试制作非常体面的shell脚本;你应该在技术上将./放在所有文件名参数扩展的前面,以防止脚本因文件名输入而破坏(或防止它们被滥用/利用来做他们不应该做的事情:for例如,rm将删除文件但跳过目录;而rm -rf *将删除所有内容。将文件名“-rf”传递给脚本或某人touch ~victim/-rf可能会这种方式可以用来改变它的行为而带来非常糟糕的后果。)

答案 2 :(得分:17)

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

答案 3 :(得分:7)

rm -- --testings.html

答案 4 :(得分:4)

另一种方法是使用find ... -name“ - *” - delete

touch -- --file 
find -x . -mindepth 1 -maxdepth 1 -name "--*" -delete 

答案 5 :(得分:3)

对于删除文件名中包含不可能字符的文件的更通用方法,一种选择是使用文件的inode。

可以通过ls -i获得。

e.g。

$ ls -lai | grep -i test
452998712 -rw-r--r--  1 dim   dim      6 2009-05-22 21:50 --testings.html

并在查找的帮助下删除它:

$ find ./ -inum 452998712 -exec rm \{\} \;

这个过程在处理大量具有文件名特性的文件时非常有用,因为它可以很容易编写脚本。

答案 6 :(得分:1)

rm ./--testings.html

rm -- --testings.html