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

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

我设法创建了一个目录字面上地命名~

(显然,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.rmdiros.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

相关内容