意外创建的名为“~”的目录(波浪号)

53 filesystem directory

我设法让一个目录字面上命名~

(显然,Python 就是os.mkdir('~/something')这样做的。)

如何在不破坏我家的情况下将其移除?

另外,如果有帮助,我将我的真实/home放在一个单独的分区上。并且副本~位于 ( real ) 中~

小智 75

转义~with\~或使用单引号'~'。这样你就可以

rmdir ~/\~
Run Code Online (Sandbox Code Playgroud)

或者

cd ~ ; rmdir '~'
Run Code Online (Sandbox Code Playgroud)

  • `rmdir` 是非破坏性的。`rmdir` 只会删除空的目录,所以如果你尝试使用 `rmdir` 任何包含任何内容的目录,`rmdir` 将拒绝删除它。 (53认同)
  • 如果您担心删除不应该删除的内容,您可以先做一些非破坏性的操作,例如:mv '~' normalname,然后删除目录 normalname。 (46认同)
  • 在这些命令的第一个中,您甚至不需要转义波浪号——`~` 仅在shell“单词”的开头特别扩展。 (3认同)

mur*_*uru 42

蟒蛇给予什么,蟒蛇带走什么:

$ python -c 'import os; os.makedirs("~/foo")'; tree; python -c 'import os; os.removedirs("~/foo")'; tree
.
??? ~
    ??? foo

2 directories, 0 files
.

0 directories, 0 files
Run Code Online (Sandbox Code Playgroud)

如果你这样做os.mkdir,你可以用它撤消os.rmdir(同样地,对于os.makedirsos.removedirs)。


Byt*_*der 36

您可以使用这样的反斜杠来转义目录名称(假设您在要删除的目录的父目录中操作):

rmdir \~
Run Code Online (Sandbox Code Playgroud)

或者您可以使用带点的相对路径作为当前目录(也可以在位于父目录中时):

rmdir ./~
Run Code Online (Sandbox Code Playgroud)

或者您可以使用完整的绝对路径:

rmdir /home/USERNAME/~
Run Code Online (Sandbox Code Playgroud)

不用担心,rmdir只能删除空目录。如果您不小心输入了命令,并且路径将评估为您的真实主目录,则它没有危险,因为它包含文件:

$ rmdir directory_with_files
rmdir: failed to remove ‘directory_with_files’: Directory not empty
Run Code Online (Sandbox Code Playgroud)