Escape o ~
com \~
ou use aspas simples '~'
.
então você pode
rmdir ~/\~
ou
cd ~ ; rmdir '~'
Eu consegui criar um diretório literalmente chamado ~
.
(Aparentemente, o os.mkdir('~/something')
do Python faz isso.)
Como faço para removê-lo sem prejudicar minha casa?
Além disso, se isso ajudar, eu tenho o meu% real/home
em uma partição separada. E a duplicata ~
está localizada em (o real ) ~
.
Escape o ~
com \~
ou use aspas simples '~'
.
então você pode
rmdir ~/\~
ou
cd ~ ; rmdir '~'
O que python dá, o python tira:
$ 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
Se você fez os.mkdir
, você pode desfazer com os.rmdir
(e da mesma forma para os.makedirs
e os.removedirs
).
Você pode escapar do nome do diretório usando uma barra invertida como esta (supondo que você esteja operando no diretório pai daquele que deseja excluir):
rmdir \~
Ou você pode usar caminhos relativos com um ponto como o diretório atual (também quando localizado no diretório pai):
rmdir ./~
Ou você pode usar o caminho absoluto completo:
rmdir /home/USERNAME/~
E não se preocupe, rmdir
só pode remover diretórios vazios. Se você digitar acidentalmente o comando e o caminho for avaliado para o seu diretório pessoal real, ele não estará em perigo porque contém arquivos:
$ rmdir directory_with_files
rmdir: failed to remove ‘directory_with_files’: Directory not empty
find
pode fazer esses milagres. O comando
ls -i
lhe dará um número inode de arquivos ou diretório.
Em seguida, você pode usar find
para excluir esses arquivos ou diretório usando:
find . -inum <inode-number> -delete #for a file
e
find . -inum <inode-number> -exec rm -rf {}\; #for directories
Você deve ter realizado home=os.path.expanduser("~")
primeiro e, em seguida, os.path.join(home,"something")
. O ~
é tratado como texto em python e não expande como em bash
ou outros shells.
$ 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/
Além dos métodos já mencionados, podemos usar o valor hexadecimal para ~
da tabela ascii de caracteres, que, ao contrário de ~
real, não se expande para o diretório inicial do usuário na linha de comando (Caso você esteja imaginando, quando o til aparece no começo de uma palavra, ele se expande para o diretório pessoal do usuário. Compare ls ~
e ls $'\x7e'
).
Veja como isso funcionaria:
# 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
Tags directory filesystem