Случайно созданный каталог с именем “ ~ ” (Тильда)

проверить, может ли это сообщение помочь:

Получение vga_switcheroo с ATI Mobility Radeon 5650 HD для работы

С уважением

1
задан 10 April 2016 в 22:05

4 ответа

Что дает 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). [ ! d1]

42
ответ дан 23 May 2018 в 12:19

Вы можете либо избежать имени каталога, используя обратную косую черту (например, если вы работаете в родительском каталоге того, который хотите удалить):

rmdir \~

Или вы можете использовать относительные пути с точкой в ​​текущем каталоге (также, если она находится в родительском каталоге):

rmdir ./~

Или вы можете использовать полный абсолютный путь:

rmdir /home/USERNAME/~

И не беспокойтесь, rmdir может удалять только пустые каталоги. Если вы случайно ошиблись в команде, и путь будет оцениваться в вашем реальном домашнем каталоге, это не опасно, потому что оно содержит файлы:

$ rmdir directory_with_files
rmdir: failed to remove ‘directory_with_files’: Directory not empty
35
ответ дан 23 May 2018 в 12:19
  • 1
    Мне нравится опция относительного пути. Невозможно сопоставить ./~ с ~/, независимо от того, в каком каталоге вы находитесь. Аналогичная ситуация с полным абсолютным путем. – MBraedley 11 April 2016 в 20:22
Команда

find может совершать такие чудеса. Команда

ls -i

даст вам количество файлов или каталогов inode. Затем вы можете использовать find для удаления таких файлов или каталогов, используя:

find . -inum <inode-number> -delete #for a file

и

find . -inum <inode-number> -exec rm -rf {}\; #for directories
2
ответ дан 23 May 2018 в 12:19

Что должно было быть сделано

Сначала вы должны выполнить home=os.path.expanduser("~"), а затем os.path.join(home,"something"). [F5] рассматривается как текст в 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/

Как избавиться от него

In дополнение к уже упомянутым методам, мы можем использовать шестнадцатеричное значение для ~ из таблицы символов 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
1
ответ дан 23 May 2018 в 12:19

Другие вопросы по тегам:

Похожие вопросы: