56 votes

Création accidentelle d'un répertoire nommé "~" (tilde)

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

(Apparemment, la version de Python os.mkdir('~/something') fait cela).

Comment puis-je l'enlever sans faire exploser ma maison ?

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

76voto

Marcin Krasowski Points 832

Échapper à la ~ con \~ ou utilisez des guillemets simples '~' . pour que vous puissiez

rmdir ~/\~

o

cd ~ ; rmdir '~'

43voto

muru Points 180007

Ce que Python donne, Python le reprend :

$ 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 l'avez fait os.mkdir vous pouvez le défaire avec os.rmdir (et de même pour os.makedirs y os.removedirs ).

36voto

Byte Commander Points 99026

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

rmdir \~

Ou vous pouvez utiliser des chemins relatifs avec un point comme répertoire courant (également lorsqu'il est situé dans le répertoire parent) :

rmdir ./~

Ou vous pouvez utiliser le chemin absolu complet :

rmdir /home/USERNAME/~

Et pas d'inquiétude, rmdir ne peut supprimer que les répertoires vides. Si vous vous trompez accidentellement dans la commande et que le chemin d'accès est évalué à votre véritable répertoire personnel, il n'est pas en danger car il contient des fichiers :

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

3voto

cjk Points 26

find La commande peut faire de tels miracles. Le commandement

ls -i

vous donnera le numéro d'inode des fichiers ou du répertoire. Vous pouvez alors utiliser find pour supprimer de tels fichiers ou répertoires en utilisant :

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

et

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

1voto

Sergiy Kolodyazhnyy Points 97292

Ce qui aurait dû être fait

Vous auriez dû effectuer home=os.path.expanduser("~") d'abord et ensuite os.path.join(home,"something") . Le site ~ est traité comme du texte en Python et ne s'étend pas comme il le fait en bash ou d'autres coquillages.

$ 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 hexagonale pour ~ à partir de la table de caractères ascii, qui contrairement à l'actuel ~ ne s'étend pas au répertoire personnel de l'utilisateur sur la ligne de commande (Au cas où vous vous poseriez la question, lorsque le tilde apparaît au début d'un mot, il s'étend au répertoire personnel de l'utilisateur. Comparez ls ~ y 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

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X