我设法创建了一个目录字面上地命名~
。
(显然,Python 就是os.mkdir('~/something')
这样做的。)
我怎样才能在不摧毁我家的情况下将其移除?
另外,如果有帮助的话,我把真实的文件/home
放在一个单独的分区上。而副本~
位于(真实的)~
。
答案1
~
用转义\~
或使用单引号'~'
. 这样你就可以
rmdir ~/\~
或者
cd ~ ; rmdir '~'
答案2
Python 给予什么,Python 就拿走什么:
$ 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
如果你这样做了os.mkdir
,你可以用os.rmdir
os.makedirs
(对于和也类似os.removedirs
)。
答案3
您可以使用反斜杠转义目录名,如下所示(假设您在要删除的目录的父目录中操作):
rmdir \~
或者您可以使用以点为单位的相对路径作为当前目录(当位于父目录中时也可以):
rmdir ./~
或者您可以使用完整的绝对路径:
rmdir /home/USERNAME/~
不用担心,rmdir
只能删除空目录。如果您不小心输入了错误的命令,并且路径会评估为您的真实主目录,则不会有危险,因为它包含文件:
$ rmdir directory_with_files
rmdir: failed to remove ‘directory_with_files’: Directory not empty
答案4
应该做什么
您应该home=os.path.expanduser("~")
先执行,然后执行os.path.join(home,"something")
。~
在 python 中,将被视为文本,并且不会像在bash
或其他 shell 中那样扩展。
$ python -c 'import os;home=os.path.expanduser("~"); os.mkdir(os.path.join(home,"something"))'
$ ls -ld ~/something
drwxrwxr-x 2 xieerqi xieerqi 4096 7月 12 21:00 /home/xieerqi/something/
如何摆脱它
除了已经提到的方法之外,我们还可以使用~
ascii 字符表中的十六进制值,与实际不同,它~
不会在命令行上扩展到用户的主目录(如果您想知道,当波浪号出现在单词开头时,它会扩展为用户的主目录。比较ls ~
和ls $'\x7e'
)。
它的工作原理如下:
# Make the directory
$ mkdir ./~
$ stat ./$'\x7e'
File: './~'
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: 801h/2049d Inode: 5768019 Links: 2
Access: (0775/drwxrwxr-x) Uid: ( 1000/ xieerqi) Gid: ( 1000/ xieerqi)
Access: 2017-07-12 21:05:31.382828424 -0600
Modify: 2017-07-12 21:05:31.382828424 -0600
Change: 2017-07-12 21:05:31.382828424 -0600
Birth: -
# and remove it
$ rmdir ./$'\x7e'
$ ls $'\x7e'
ls: cannot access '~': No such file or directory