Habe eine Datei mit dem Namen ~ (tilde) in meinem Home-Verzeichnis

46

Mir ist gerade aufgefallen, dass ich eine Datei ~in meinem ~-Verzeichnis habe.

$ ls -la ~
...
-rw-r-----  1 x1 x1  733962240 Mar  1 17:55 ~
...

Irgendeine Idee, wie ich mvoder rmes kann?

scrrr
quelle
Versuchen Sie es mit i-node zu löschen.
Gronostaj

Antworten:

55

Die ultimative Lösung für Dateien, die mit normalen Mitteln nicht gelöscht werden können:

ls -il 

In der ersten Spalte wird die Inode-Nummer der Dateien angezeigt.

find . -inum [inode-number] -exec rm -i {} \;

Dadurch wird die Datei mit der angegebenen Inode-Nummer nach der Überprüfung gelöscht.

Quetschen
quelle
Das hat funktioniert. Vielleicht ist die Lösung von rici auch gut, aber ich habe es nicht versucht. Danke vielmals!
Scrrr
Ja, Ricis Antwort ist auch gut. Und ich denke, es ist besser, weil es einfacher ist.
Andrey Regentov
nett, +1. Ich habe deine Antwort geändert und -deletestattdessen -execfestgestellt, dass du sie verwendet hast. Das rm -iist eine gute Idee. Deshalb habe ich einen Rollback durchgeführt. Es tut uns leid.
Terdon
Mach dir keine Sorgen. Immer froh, wenn jemand meine Antworten für seine Zeit wert hält :)
Squeezy
Diese Antwort hat bei mir nicht funktioniert. Ubuntu 14.04 LTS
KhoPhi
46

Sie sollten in der Lage sein, auf diese Datei als ~/~(ohne Anführungszeichen) zu verweisen, da die Tilde-Erweiterung nur die Tilde ( ~) am Anfang des Wortes anwendet .

rici
quelle
17
Gehen Sie auch in den Ordner und rm ./~aus dem gleichen Grund, den Sie gesagt haben
Carlos Campderrós
@ CarlosCampderrós erwägen, das zu einer Antwort zu machen. Ich würde es als die "beste" und einfachste Lösung betrachten, verglichen mit anderen Antworten, da es ./~wörtlich "eine Datei oder ein Ordner mit dem Namen ~im aktuellen Verzeichnis" bedeutet . Es gibt keine Hacks wie Escape-Zeichen oder Inode-Referenzen.
ADTC
@ADTC: Um meine Antwort zu verteidigen, muss die CWD nicht geändert werden ./~. Nach fünf Jahren ist mein Gedächtnis ein wenig verschwommen, aber ich denke, deshalb habe ich ~/~eher vorgeschlagen als das Normalere ./~: Die Frage bezieht sich speziell auf "eine Datei, die ~im Home-Verzeichnis von [OP] benannt ist "; nicht "im aktuellen Verzeichnis".
rici
@rici Das macht Sinn, und im Kontext der Frage wäre es angebracht. Aber ich sehe Antworten, die allgemein sind, oder spreche zuerst allgemein, bevor ich mich näher mit dem konkreten Fall der Frage befasse. Das ist meine Verteidigung: D
ADTC
20

Zitiere es ( rm '~') oder entkomme ihm ( rm \~).


Es ist immer eine dieser Optionen (auch für z. B. $) oder "add" --, um zu verhindern, dass der Dateiname als Argument interpretiert wird: rm -- -iEntfernt die angegebene Datei -i. Auch nützlich, rm -- *wenn Sie alle Dateien im aktuellen Verzeichnis löschen möchten: Kein Zufall, rm -f *nur weil eine Datei so heißt.

Daniel Beck
quelle
Hm, nein, das scheint nicht zu funktionieren. Ich habe die einfachen Anführungszeichen ausprobiert, das Entkommen und die Backticks. Er nimmt die Datei nicht auf. Sagt, entweder existiert es nicht oder interpretiert ~ als Home-Verzeichnis ..
Scrrr
@scrrr Was ist deine Shell?
Daniel Beck
Bash. Aber das Problem löste den Inode-Weg.
Scrrr
@scrrr Ich bin froh, dass Ihr Problem gelöst ist, aber jetzt möchte ich wissen, warum Bash-Fluchten auf Ihrem System nicht so funktionieren wie auf meinem.
Isaac Rabinovitch
1
Vorsichtig. --Verhindert nur, dass die folgenden Argumente als Parameter interpretiert werden - es hindert die Shell nicht daran, ihre Erweiterung durchzuführen (z. B. *), was hier passiert. (Ich weiß, dass Sie es als Alternative für andere Situationen vorgeschlagen haben, aber eine Warnung wäre gut.)
Bob