Linux无法删除(rm)文件

时间:2013-01-18 22:45:41

标签: linux shell

我正在尝试删除包含空格的文件,但它无效。

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 个答案:

答案 0 :(得分:8)

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

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选项的目录。

答案 1 :(得分:3)

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

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

rm 'hw yoyo ~'

并使用转义方法,您将执行:

rm hw\ yoyo\ ~

答案 2 :(得分:2)

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

此外,如果你的shell支持它,你可以使用文件名完成(只要文件名 start 并带有特殊字符)。例如:

$ 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。它也可能适用于其他现代炮弹。

答案 3 :(得分:0)

rm "hw yoyo ~"

or 

rm hw\ yoyo\ ~

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

e.g。

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