Мне удалось сделать каталог буквально названным ~
.
(По-видимому, Python os.mkdir('~/something')
делает это.)
Как я удаляю его, не уничтожая мой дом?
Кроме того, если это помогает, у меня есть свое реальное /home
на отдельном разделе. И дубликат ~
расположен в (реальное) ~
.
Закройте ~
с помощью \ ~
или используйте одинарные кавычки '~'
.
так что вы можете
rmdir ~/\~
или
cd ~ ; rmdir '~'
Что дает питон, питон забирает:
$ 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 <inode-number> -delete #for a file
и
find . -inum <inode-number> -exec rm -rf {}\; #for directories
Вы должны были выполнить home = os.path.expanduser ("~")
сначала, а затем os.path.join (home, "что-то")
. ~
рассматривается как текст в Python и не расширяется, как в bash
или других оболочках.
$ 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