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) ~
.
Echappez le ~
avec \~
ou utilisez des guillemets simples '~'
. afin que vous puissiez
rmdir ~/\~
ou
cd ~ ; rmdir '~'
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
).
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
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
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/
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