Wie kann ich eine Datei oder ein Verzeichnis mit dem Namen "\" entfernen?


20

Ich verwende Terminal auf einem Ubuntu-Computer und es gibt eine Datei, die ich löschen möchte. Der Name der Datei ist \(nur ein Backslash).

Normalerweise würde ich das jetzt einfach tun

rm filename

Wenn ich es aber tue, rm \dann denke ich, dass ich versuche, einen mehrzeiligen Befehl zu schreiben.

Wie kann ich diese Datei löschen? Ich weiß, dass ich nur das GUI-Dateisystem verwenden könnte, aber das ist nicht sehr effizient.

Wie kann ich eine aufgerufene Datei (im Terminal) löschen \?


1
Warum haben Sie eine Datei mit dem Namen? (Es lässt mich codehier in diesem Kommentar nicht einmal in einem Block
schreiben

7
Es macht mehr Spaß, eine Datei mit dem Namen <BEL>, auch bekannt als Strg-G, zu löschen, wenn ich mich richtig erinnere. Jedes Mal, wenn Sie eine Aktion ausführen, piept die Tastatur, bis Sie (a) die unsichtbare Datei entdeckt haben. und (b) bestimmt, wie eine Datei mit nur einem nicht druckbaren Zeichen in ihrem Namen gelöscht werden soll.
Pieter Geerkens

1
Was noch wichtiger ist, wie löscht man eine Datei mit dem Namen "/"?
Curt

1
@ Kurt fsck. Ernst. Wenn eine Datei mit dem Namen /existiert, ist Ihr Dateisystem beschädigt.
zwol

2
Ich mochte immer die Datei mit dem Namen *mich ...
RBerteig

Antworten:


48

Verwenden Sie rm \\(lassen Sie den Backslash mit einem anderen Backslash hinter sich). Beachten Sie, dass dies auch für benannte Verzeichnisse ähnlich funktioniert \(entweder rmdirmit oder rmmit dem -rFlag).

Beispiel:

> mkdir demo
> CD-Demo
> berühren Sie \\
> ls -l
insgesamt 0
-rw ------- 1 hennes benutzer 0 Jul 29 20:25 \
> rm \\
> ls -l
insgesamt 0

3
Oder nach demselben Prinzip rm '\'(aber nicht rm "\" ).
Übelsuppe

2
@evilsoup Nur um dies zu verdeutlichen, wird das \ Zeichen als Escape-Zeichen in durch doppelte Anführungszeichen getrennten Zeichenfolgen verwendet. Das Sprichwort rm "\"wird in eine nicht geschlossene Zeichenfolge zerlegt, da das zweite Anführungszeichen mit einem Escape-Zeichen verwendet wird (und somit als das doppelte Anführungszeichen selbst und nicht als das Ende einer Zeichenfolge zerlegt wird). Daher wartet das Terminal, bis Sie die Zeichenfolge mit einer anderen Zeichenfolge beendet haben ". Die äquivalente Methode hier doppelte Anführungszeichen zu verwenden wäre rm "\\"(was sowohl direkt als gleichwertig ist rm '\'und rm \\ , wie Sie bereits bestätigt).
Durchbruch

15

Eine allgemeine Taktik zum manuellen Löschen von Dateien mit unangenehmen Zeichen im Namen ist

rm -i ./*

Dadurch werden Sie aufgefordert, zu entscheiden, ob jede Datei im Verzeichnis gelöscht werden soll oder nicht.


3
Oder Single, es war ein Single Char. rm -i ./?
Hennes

1
Ja. Wenn Sie einen spezifischeren Glob schreiben können als ./*, ist das immer eine gute Idee, besonders wenn Sie etwas Destruktives tun.
zwol

4
+1 für das Präfixieren Ihres Globus mit./
Evilsoup

12

Sie können die Verknüpfung auch aufheben, indem Sie auf den Inode einer Datei verweisen

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

Bitte überprüfen Sie zuerst den Inode der Datei. ls -li

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

Inode von "\" ist "137791". Verwenden Sie dann den Befehl find, um "\" mit der Inode-Nummer zu löschen.

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

rm: entferne reguläre Datei `./ \ '? Ja

"\" wird dann entfernt.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.