0

我正在尝试删除一个包含空格的文件,但它不起作用。

hw1:84$ ls
hw yoyo ~  misc.ml  test.ml
hw1:85$ rm hw yoyo ~
rm: cannot remove `hw': No such file or directory
rm: cannot remove `yoyo': No such file or directory
rm: cannot remove `/home/linux/ieng6/cs130w/cs130wau': Is a directory
4

4 回答 4

8

如果文件是,hw yoyo ~那么您需要引用它,否则rm将尝试删除三个单独的(不存在或更糟糕的存在)文件:

rm "hw yoyo ~"

文件名中的空格通常不是一个好主意,~与空格结合起来简直是愚蠢的!您最终会在某个时候删除您的主目录。

由于文件在当前目录hwyoyo不存在,您会收到错误消息:

rm: cannot remove `hw': No such file or directory
rm: cannot remove `yoyo': No such file or directory

该文件~也不存在于当前目录中,但~它是您主目录的别名,因此您会看到不同的错误消息:

rm: cannot remove `/home/linux/ieng6/cs130w/cs130wau': Is a directory

您很幸运,默认情况下rm不会删除没有该-r选项的目录。

于 2013-01-18T22:47:55.063 回答
3

当文件名中有空格等特殊字符时,文件名必须放在引号字符内。处理此问题的另一种方法是转义名称中的特殊字符。

所以,使用报价方法你应该这样做:

rm 'hw yoyo ~'

并使用转义方法,您将执行以下操作:

rm hw\ yoyo\ ~
于 2013-01-18T22:54:15.383 回答
2

告诉您引用文件名或转义特殊字符的答案是正确的。

此外,如果您的 shell 支持它,您可以使用文件名完成(只要文件名不以特殊字符开头)。例如:

$ ls
hw yoyo ~
$ rm h<Tab>

键入rm h,然后Tab,shell 会将其扩展为给定可用文件名的最长唯一前缀。如果这是当前目录中唯一名称以 . 开头的文件h,它将扩展为整个名称,并正确转义. 击中后Tab,我看到:

rm hw\ yoyo\ ~

我可以点击Enter删除文件。

或者我可以从引用名称开始:

$ rm 'h<Tab>

扩展为:

$ rm 'hw yoyo ~'

它甚至会在必要时结合引用和转义:

$ touch 'foo$bar'
$ rm "f<Tab>

扩展为:

$ rm "foo\$bar"

如果您的 shell 可以为您记住引用规则,那么它会比您自己记住它们更快、更容易——即使您已经知道它们。

以上适用于 bash。它也可能适用于其他现代外壳。

于 2013-01-18T23:05:38.763 回答
0
rm "hw yoyo ~"

or 

rm hw\ yoyo\ ~

在某些特殊情况下,使用单引号。

例如

kent$  l
total 0
-rw-r--r-- 1 kent kent 0 Jan 18 23:54 a b $HOME

kent$  rm "a b $HOME"
rm: cannot remove ‘a b /home/kent’: No such file or directory

kent$  rm 'a b $HOME'

kent$  l
total 0
于 2013-01-18T22:49:31.813 回答