Répertoire créé accidentellement et nommé “~” (tilde)

46

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

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

Comment puis-je l'enlever sans fouiller chez moi?

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

    
posée UniversallyUniqueID 07.04.2016 - 17:34
la source

5 réponses

73

Échappez à ~ avec \~ ou utilisez des guillemets simples '~' . afin que vous puissiez

rmdir ~/\~

ou

cd ~ ; rmdir '~'
    
réponse donnée Marcin Krasowski 07.04.2016 - 17:37
la source
42

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 même pour os.makedirs et os.removedirs ).

    
réponse donnée muru 07.04.2016 - 17:43
la source
35

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

rmdir \~

Vous pouvez également utiliser des chemins relatifs avec un point comme répertoire actuel (également lorsqu'ils se trouvent 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 des 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
    
réponse donnée Byte Commander 07.04.2016 - 17:59
la source
2

find command peut faire de tels miracles. La commande

ls -i

vous donnera le nombre d'inodes 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
    
réponse donnée user2763554 11.04.2016 - 06:27
la source
1

Ce qui aurait dû être fait

Vous devriez avoir exécuté home=os.path.expanduser("~") en premier, puis os.path.join(home,"something") . Le ~ est traité comme du texte en python et ne se développe pas comme il le fait dans bash ou dans les 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 pour ~ à partir de la table des caractères ascii, qui contrairement à la réalité ~ ne s’étend pas au répertoire de base de l’utilisateur sur la ligne de commande Je me demande si, lorsque 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
    
réponse donnée Sergiy Kolodyazhnyy 13.07.2017 - 05:09
la source

Lire d'autres questions sur les étiquettes