意外创建的名为“〜”的目录(代字号)
我设法创建一个名为~
的目录。
(显然,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.makedirs
和os.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