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

时间:2011-04-15 13:32:44

标签: linux bash

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

我试过把它放在引号中,用反斜杠转义,两者结合,似乎没什么用。

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

4 个答案:

答案 0 :(得分:69)

您可以使用./-filename来引用它,或者某些命令可以让您在双击之后将其放入:

rm -- -filename

答案 1 :(得分:15)

你可以用以下方法摆脱它:

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认为它不是一个选项(因为它不是以-开头),但它仍然指的是当前目录中的特定文件

答案 2 :(得分:4)

您可以使用 - ,例如:

rm -- -file

答案 3 :(得分:0)

除了使用rm之外,如果您了解某种语言,也可以使用它们。它们不受这种贝壳疣的影响。

红宝石(1.9 +)

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

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