意外创建的名为“〜”的目录(代字号)

我设法创建一个名为~的目录。

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

如何在不去家的情况下将其删除?

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

使用\~转义\~或使用单引号'~' 。 所以你可以

 rmdir ~/\~ 

要么

 cd ~ ; rmdir '~' 

什么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.makedirsos.removedirs )。

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

 rmdir \~ 

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

 rmdir ./~ 

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

 rmdir /home/USERNAME/~ 

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

 $ rmdir directory_with_files rmdir: failed to remove 'directory_with_files': Directory not empty 

find命令可以做这样的奇迹。 命令

 ls -i 

将为您提供inode文件或目录的数量。 然后你可以使用find来删除这些文件或目录:

 find . -inum  -delete #for a file 

 find . -inum  -exec rm -rf {}\; #for directories 

应该做些什么

您应该首先执行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字符表中的~hex值,这与实际的~不会在命令行上扩展到用户的主目录(如果你想知道,当代字号出现在一个单词的开头,它会扩展到用户的主目录。比较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