web-dev-qa-db-fra.com

Répertoire créé accidentellement nommé "~" (tilde)

J'ai réussi à faire un répertoire littéralement nommé ~.

(Apparemment, os.mkdir('~/something') de Python le fait.)

Comment puis-je l'enlever sans détruire ma maison?

De plus, si cela peut aider, j'ai mon vrai /home sur une partition séparée. Et le duplicata ~ se trouve dans (le réel) ~.

47

Echappez le ~ avec \~ ou utilisez des guillemets simples '~'. afin que vous puissiez

rmdir ~/\~

ou

cd ~ ; rmdir '~'
74
Marcin Krasowski

Qu'est-ce que python donne, python enlève:

$ 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

Si vous avez utilisé os.mkdir, vous pouvez l'annuler avec os.rmdir (et de la même manière pour os.makedirs et os.removedirs).

42
muru

Vous pouvez soit échapper le nom du répertoire en utilisant une barre oblique inverse, comme ceci (en supposant que vous travaillez dans le répertoire parent de celui que vous souhaitez supprimer):

rmdir \~

Ou vous pouvez utiliser des chemins relatifs avec un point comme répertoire actuel (également lorsqu'ils sont situés dans le répertoire parent):

rmdir ./~

Ou vous pouvez utiliser le chemin absolu complet:

rmdir /home/USERNAME/~

Et ne vous inquiétez pas, rmdir ne peut supprimer que les répertoires vides. Si vous tapez mal la commande par inadvertance et que le chemin est évalué dans votre répertoire personnel, cela n’est pas dangereux car il contient des fichiers:

$ rmdir directory_with_files
rmdir: failed to remove ‘directory_with_files’: Directory not empty
36
Byte Commander

find commande peut faire de tels miracles. La commande

ls -i

vous donnera le numéro d'inode de fichiers ou le répertoire. Ensuite, vous pouvez utiliser find pour supprimer ces fichiers ou répertoires en utilisant:

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

et

find . -inum <inode-number> -exec rm -rf {}\; #for directories
2
user2763554

Ce qui aurait dû être fait

Vous devriez d'abord avoir exécuté home=os.path.expanduser("~"), puis os.path.join(home,"something"). Le ~ est traité comme du texte dans python et ne se développe pas comme il le fait dans bash ou d'autres 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/

Comment s'en débarrasser

En plus des méthodes déjà mentionnées, nous pouvons utiliser la valeur hexadécimale de ~ à partir de la table de caractères ascii, qui contrairement à ~ ne s’étend pas au répertoire de base de l’utilisateur sur la ligne de commande (Si vous vous le demandez, le tilde apparaît Au début d'un mot, il se développe dans le répertoire de base de l'utilisateur. Comparez ls ~ et ls $'\x7e').

Voici comment cela fonctionnerait:

# 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
Sergiy Kolodyazhnyy