:~
我不小心在 bash shell 上创建了一个文件名
scp foo :~
怎么删除呢?
答案1
尝试rm ':?'
或rm ":?"
或rm :\?
主要是您需要用单引号或双引号引用文件名。或转义文件名中包含的任何特殊字符。
我可以数的一些特殊字符是:
*
|
$
&
#
<>
;
space/tab/newline
\
brackets/parenthesis/braces
'"`
?
etc
我建议使用单引号来防止删除错误命名的文件,my_file
而不是使用$file
或rm $file
。单引号字符是唯一不能在 Bourne 类 shell 中用单引号引用的字符,但您始终可以使用 和 本身来引用文件名的其余部分,如下所示:rm "$file"
file='my_file'
'...'
'
\'
rm -- '-$#~<>'\''"*?[]{}'`
请注意,这-
对 shell 来说并不特殊,但其特殊之处在于,rm
如果在参数开头找到它,则将其视为选项。这里--
告诉rm
后面的参数不被视为选项,即使它们以 开头-
。
答案2
一般来说,每当你想删除一个奇怪名称的文件时,你可以尝试使用--
表示选项结束的标记。该标志之后的任何内容都将作为位置参数处理。 (也可以看看:“--”(双破折号)是什么意思?)
那么,那就是
rm -i -- :?
(正如 @Doug O'Neal 所建议的,该-i
选项会在删除之前提示您,以确保您删除的是正确的文件。)
然而,在这种情况下,?
shell 会将其扩展为全局字符。所以上面的方法是行不通的。
在这种情况下,您可以使用 shell 的自动完成功能。进入该奇怪名称的文件所在的目录,然后键入rm :
(不按Enter),然后按Tab循环浏览当前目录中的所有文件。名称奇怪的文件将被正确引用。