Мне удалось сделать каталог буквально по имени ~
.
(Видимо, это os.mkdir('~/something')
делает Python .)
Как я могу удалить его, не разбивая мой дом?
Кроме того, если это помогает, у меня есть свой реальный /home
на отдельном разделе. И дубликат ~
находится в ( настоящий ) ~
.
filesystem
directory
UniversallyUniqueID
источник
источник
os.mkdir(os.path.expanduser('~/something'))
.os.rmdir('~/something')
чтобы удалить его?Ответы:
Побег
~
с\~
или использовать одинарные кавычки'~'
. так что вы можетеили же
источник
rmdir
неразрушающий.rmdir
удалит только пустые каталоги, поэтому, если вы попытаетесь использоватьrmdir
любой каталог, в котором есть что-либо,rmdir
он откажется удалить его.~
она раскрывается специально только в начале слова оболочки.rmdir *
. Так как он удаляет только пустые каталоги, вам не нужно беспокоиться о том, что он сделает что-то разрушительное.ls -d
чтобы увидеть, содержит ли она каталог или файл, который вам нужен. Не нужно ничего с таким эффектом, какmv
.Что дает питон, тот забирает:
Если вы сделали
os.mkdir
, вы можете отменить это сos.rmdir
(и аналогично дляos.makedirs
иos.removedirs
).источник
Вы можете либо экранировать имя каталога, используя обратную косую черту, как это (при условии, что вы работаете в родительском каталоге, который вы хотите удалить):
Или вы можете использовать относительные пути с точкой в качестве текущего каталога (также если он находится в родительском каталоге):
Или вы можете использовать полный абсолютный путь:
И не стоит беспокоиться,
rmdir
можно только удалить пустые каталоги. Если вы случайно наберете команду с ошибкой, а путь к ней будет соответствовать вашему реальному домашнему каталогу, он не представляет опасности, поскольку содержит файлы:источник
./~
с~/
, независимо от того, в каком каталоге вы находитесь в данный момент в. Аналогичная ситуация с полным абсолютным путем.find
Команда может творить такие чудеса. Командадаст вам номер индекса файлов или каталогов. Затем вы можете использовать
find
для удаления таких файлов или каталогов, используя:а также
источник
Что должно было быть сделано
Вы должны были выполнить
home=os.path.expanduser("~")
сначала, а потомos.path.join(home,"something")
. Он~
рассматривается как текст в Python и не расширяется, как вbash
других оболочках.Как от этого избавиться
В дополнение к уже упомянутым методам, мы можем использовать шестнадцатеричное значение для
~
из таблицы символов ascii, которое в отличие от фактического~
не распространяется на домашний каталог пользователя в командной строке (на случай, если вам интересно, когда тильда появляется в начале Одним словом, он расширяется до домашнего каталога пользователя. Сравнитеls ~
иls $'\x7e'
).Вот как это будет работать:
источник