Antworten:
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.
-deletestattdessen -execfestgestellt, dass du sie verwendet hast. Das rm -iist eine gute Idee. Deshalb habe ich einen Rollback durchgeführt. Es tut uns leid.
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 .
rm ./~aus dem gleichen Grund, den Sie gesagt haben
./~wörtlich "eine Datei oder ein Ordner mit dem Namen ~im aktuellen Verzeichnis" bedeutet . Es gibt keine Hacks wie Escape-Zeichen oder Inode-Referenzen.
./~. 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".
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.
--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.)