Linux 如何处理以连字符(-)开头的文件名?

Linux 如何处理以连字符(-)开头的文件名?,linux,bash,Linux,Bash,不知何故,在某个时刻,我意外地在我的主目录中创建了一个名为'-s'的文件。它大约有500 kb,我不知道它是否包含重要数据。我想不出任何方法来处理这个文件,因为我用来查看、复制或移动它的每个命令都会将文件名解释为一个参数 我试着用引号把它引起来,用反斜杠来逃避,两者结合,似乎什么都不管用 另外,当我第一次向同事提出这个问题时,我们对此困惑了一段时间,直到有人无意中听到并问“为什么不直接重命名它?”在我向他解释cp和mv都认为文件名是一个参数,所以它不起作用后,他说“不,不是从命令行,从Gnome

不知何故,在某个时刻,我意外地在我的主目录中创建了一个名为'-s'的文件。它大约有500 kb,我不知道它是否包含重要数据。我想不出任何方法来处理这个文件,因为我用来查看、复制或移动它的每个命令都会将文件名解释为一个参数

我试着用引号把它引起来,用反斜杠来逃避,两者结合,似乎什么都不管用


另外,当我第一次向同事提出这个问题时,我们对此困惑了一段时间,直到有人无意中听到并问“为什么不直接重命名它?”在我向他解释cp和mv都认为文件名是一个参数,所以它不起作用后,他说“不,不是从命令行,从Gnome执行。”我不好意思地听从了他的建议,结果奏效了。但是,如果没有窗口管理器,并且命令行是唯一的选项,我仍然对如何解决这个难题感兴趣。

您可以使用
/-filename
引用它,或者某些命令允许您将它放在双破折号之后:

rm -- -filename

您可以通过以下方法摆脱它:

rm ./-s
rm
命令(至少在Ubuntu 10.04下)甚至会告诉您:

pax@pax-desktop:~$ rm -w
rm: invalid option -- 'w'
Try `rm ./-w' to remove the file `-w'.
Try `rm --help' for more information.
之所以有效,是因为
rm
不认为它是一个选项(因为它不是以
-
开头),但它仍然引用当前目录中的特定文件。

您可以使用--,例如:


除了使用
rm
,如果你懂一门语言,你还可以使用它们。它们不受这种贝壳疣的影响

红宝石(1.9+)


正确但不是泛型的,不适用于非gnu,甚至不适用于所有gnu实用程序当然!真不敢相信我竟然没有想到给文件名添加路径。现在我感觉更傻了:-)@histumness:这里也一样:-)
perl-e'unlink“-s”
(因为perl已经知道系统调用而没有加载任何东西)
rm -- -file
$ ruby -rfileutils -e 'FileUtils.rm("-s")'
$ ruby -e 'File.unlink("-s")'