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

不知何故,在某个时候,我不小心在我的主目录中创build了一个名为“-s”的文件。 它大约是500 kb,我不知道它是否包含重要的数据。 我找不出任何方法来处理这个文件,因为我用来查看,复制或移动它的每个命令都将文件名解释为一个参数。

我试过把它放在引号中,用反斜杠,两者的组合来转义它,似乎没有任何工作。

另外,当我第一次向同事提出这个问题的时候,我们困惑了一会儿,直到有人终于听到,问“你为什么不重新命名呢?” 我向他解释说,cp和mv都认为文件名是一个参数,所以它不起作用,他说:“不,不是从命令行,从Gnome执行。 我羞于听从他的build议,而且工作。 不过如果你没有窗口pipe理器,命令行是唯一的select,我仍然对如何解决这个难题感兴趣。

你可以使用./-filename来引用它,或者一些命令会让你把它放在双破折号之后:

 rm -- -filename 

你可以用下面的方法去掉它:

 rm ./-s 

rm命令(至less在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 -- -file 

除了使用rm ,如果你知道一种语言,你也可以使用它们。 他们不受这种shell疣的影响。

ruby(1.9+)

 $ ruby -rfileutils -e 'FileUtils.rm("-s")' 

要么

 $ ruby -e 'File.unlink("-s")'