Diretório criado acidentalmente chamado “~” (til)

46

Eu consegui criar um diretório literalmente chamado ~ .

(Aparentemente, o os.mkdir('~/something') do Python faz isso.)

Como posso removê-lo sem prejudicar minha casa?

Além disso, se ajudar, eu tenho o meu% real/home em uma partição separada. E a duplicata ~ está localizada em (o real ) ~ .

    
por UniversallyUniqueID 07.04.2016 / 17:34

5 respostas

73

Escape o ~ com \~ ou use aspas simples '~' . então você pode

rmdir ~/\~

ou

cd ~ ; rmdir '~'
    
por Marcin Krasowski 07.04.2016 / 17:37
42

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 , poderá desfazer com os.rmdir (e da mesma forma para os.makedirs e os.removedirs ).

    
por muru 07.04.2016 / 17:43
35

Você pode escapar o 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
    
por Byte Commander 07.04.2016 / 17:59
2
O comando

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
    
por user2763554 11.04.2016 / 06:27
1

O que deveria ter sido feito

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/

Como se livrar dele

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
    
por Sergiy Kolodyazhnyy 13.07.2017 / 05:09