Comment supprimer un fichier ou un répertoire appelé «\»?


20

J'utilise un terminal sur une machine Ubuntu et il y a un fichier que je voudrais supprimer. Le nom du fichier est \(juste une barre oblique inverse).

Maintenant, d'habitude, je ferais juste

rm filename

Cependant, si je le fais, rm \il pense que j'essaie d'écrire une commande sur plusieurs lignes.

Comment puis-je supprimer ce fichier? Je sais que je pourrais simplement utiliser le système de fichiers GUI, mais ce n'est pas très efficace.

Alors, comment puis-je supprimer (dans le terminal) un fichier appelé \?


1
Pourquoi avez-vous un fichier nommé comme ça? (Cela ne me permet même pas de le mettre dans un codebloc ici dans ce commentaire!)
AJMansfield

7
Plus amusant est d'essayer de supprimer un fichier appelé <BEL>, alias Ctrl-G si je me souviens bien. Chaque fois que vous faites un ls, le clavier émet un bip jusqu'à ce que vous (a) découvriez le fichier invisible ; et (b) déterminé comment supprimer un fichier avec un seul caractère non imprimable dans son nom.
Pieter Geerkens

1
Plus important encore, comment supprimez-vous un fichier nommé "/"?
Curt

1
@Curt fsck. Sérieusement. Si un fichier nommé /existe, votre système de fichiers est corrompu.
zwol

2
J'ai toujours aimé le fichier nommé *...
RBerteig

Réponses:


48

Utiliser rm \\(échapper à la barre oblique inverse avec une autre barre oblique inverse). Notez que cela fonctionne également de manière similaire, pour les répertoires nommés \(en utilisant soit rmdir, soit rmavec l' -rindicateur).

Exemple:

> démo mkdir
> démo cd
> toucher \\
> ls -l
total 0
-rw ------- 1 utilisateurs de hennes 0 juil 29 20:25 \
> rm \\
> ls -l
total 0

3
Ou, selon le même principe, rm '\'(mais pas rm "\" ).
evilsoup

2
@evilsoup juste pour apporter des précisions supplémentaires à ce sujet, le \ caractère est utilisé comme caractère d'échappement dans les chaînes délimitées par des guillemets doubles. Dire rm "\"sera analysé dans une chaîne non fermée, car le deuxième guillemet est utilisé avec un caractère d'échappement (et sera donc analysé comme le caractère de guillemet double lui-même, et non la fin d'une chaîne). Ainsi, le terminal attendra que vous finissiez la chaîne par une autre ". La méthode équivalente pour utiliser des guillemets serait ici rm "\\"(qui est directement équivalente aux deux rm '\'et rm \\ , comme vous l'avez déjà confirmé).
Percée

15

Une tactique générale pour supprimer manuellement les fichiers avec des caractères maladroits dans leurs noms est

rm -i ./*

Cela vous invitera à choisir de supprimer ou non chaque fichier du répertoire.


3
Ou, célibataire, c'était un seul char. rm -i ./?
Hennes

1
Ouais. Si vous pouvez écrire un glob plus spécifique que ./*, c'est toujours une bonne idée, surtout lorsque vous faites quelque chose de destructeur.
zwol

4
+1 pour avoir préfixé votre glob avec./
evilsoup

12

Vous pouvez également supprimer le lien en référençant l'inode d'un fichier

linus ~/test $ touch \\
linus ~/test $ ls -li
total 0
15204561 -rw-r--r-- 1 pat sudo 0 Jul 29 23:03 \
linus ~/test $ find . -inum 15204561 -exec rm -v {} \;
removed `./\\'
linus ~/test $ ls -li
total 0
linus ~/test $ 

0

Veuillez d'abord vérifier l'inode du fichier. ls -li

137791 -rw-rw-r--. 1 svr svr 366 11 mars 15:57

l'inode de "\" est "137791, puis utilisez la commande find pour supprimer" \ "avec le numéro d'inode.

trouver . -inum 137791 -exec rm -i {} \;

rm: supprimer le fichier normal `./ \ '? Oui

"\" sera alors supprimé.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.