我正在尝试删除包含空格的文件,但它无效。
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
答案 0 :(得分:8)
如果文件是hw yoyo ~
,那么您需要引用它,否则rm
会尝试删除三个单独的(不存在甚至更糟糕的)文件:< / p>
rm "hw yoyo ~"
文件名中的空格通常不是一个好主意,将~
与空格结合起来是非常愚蠢的!您最终会在某个时候删除您的主目录。
由于当前目录中不存在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
您很幸运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