Wie lösche ich eine Datei mit einem seltsamen Namen?

33

Ich habe ein Programm geschrieben, das die POSIX-Memory-Mapping-Funktion verwendet ( mmap)

Das Programm nimmt eine Datei ( a.dat) und ordnet sie zum Lesen / Schreiben zu.

Aufgrund von Programmfehlern wird jedes Mal, wenn ich das Programm starte, eine Datei mit seltsamen Namen (z. B. ?d?P?^z??d?P?^z?) erstellt. Der Fehler ist behoben, aber ich kann die Dateien nicht löschen.

Ich kann es weder über die Befehlszeile noch durch Auswählen / Löschen im Fenstermanager löschen.

Wie soll ich es also löschen? Ich benutze Ubuntu 11.04.

AK
quelle
1
Auch wenn Sie den Dateinamen nicht einfach eingeben können, sollte das Löschen in einem grafischen Dateimanager problemlos funktionieren. Welchen Fehler bekommen Sie?
Thomas
2
@Aditya, ich habe kein Problem damit, solche Dateien von der Kommandozeile aus zu löschen, wenn ich ihre Namen in einfache Anführungszeichen setze ( rm '?d?P?^z??d?P?^z?'). Hast du das versucht?
Frédéric Hamidi
Das Löschen aus dem grafischen Fenstermanager sagt nur, dass die Datei 'Dateiname' nicht gelöscht werden kann. @ Frédéric Hamidi Danke, dass du mir geholfen hast, eine Datei zu löschen. Aber der andere mit dem Namen '? M? P ???)? M? P ???)' wird nicht gelöscht ... Die Fehlermeldung lautet "rm: kann`? M? P ???)? M nicht entfernen ? P ???) ': Keine solche Datei oder Verzeichnis "
AK
1
@Aditya, diese andere Datei muss nicht druckbare Zeichen enthalten. Führen Sie die folgenden Schritte aus: 1 / Verschieben Sie alle gültigen Dateien aus diesem Ordner. 2 / Problem rm *innerhalb des Ordners.
Frédéric Hamidi
1
Wenn Sie den Dateinamen eingeben, versuchen Sie, mit Anführungszeichen zu beginnen, und verwenden Sie dann die automatische Vervollständigung, sobald dies funktioniert (nach ein oder zwei Zeichen). Bei der automatischen Vervollständigung wird die [Tab] -Taste gedrückt, damit die Shell den Namen automatisch vervollständigt. Auf diese Weise ist es möglicherweise erfolgreicher, die Namen korrekt zu umgehen.

Antworten:

45

rm -i -- *werden Sie aufgefordert, jede Datei zu löschen. Sie können und sollten '*' in eine engere Übereinstimmung ändern, wenn viele Dateien vorhanden sind. Die --Verarbeitungsoptionen werden gestoppt, sodass eine Datei mit dem Namen -dvon rmerfolgreich entfernt wird .

Ich habe das in der Vergangenheit benutzt und es funktioniert so lange, bis Sie einen Sonderzeichen oder 2 treffen, die es nicht mag.

JimR
quelle
1
Dies funktioniert beispielsweise nicht für eine Datei mit dem Namen -d.
SCO
2
@SCO Wenn es bei Ihnen nicht funktioniert und abhängig von Ihrer Version von rm, können Sie Folgendes tun: rm -i -- * The --weist einige Versionen von rm darauf hin, dass nach --und keine Befehlszeilenschalter mehr vorhanden sind , um weitere Argumente als Dateinamen zu behandeln.
JimR
1
Ich denke, diese Antwort sollte den Kommentar von @JimR enthalten: Using --im rmBefehl.
Felipe Alvarez
16

Mit können Sie ls -lialle Dateien nach Inode anzeigen. Führen Sie dann diesen Befehl aus, um die Datei zu entfernen:

find . -inum ${INODE_NUM} -delete

Ich -maxdepth 1habe meinen Fund nur aus Sicherheitsgründen ergänzt:

find . -maxdepth 1 -inum ${INODE_NUM} -delete
Felipe Alvarez
quelle
1
Genau genommen ls -iist es gut genug.
Scott
lslöscht keine Dateien. OP will das.
Felipe Alvarez
4
In der ersten Zeile Ihrer Antwort steht: "Sie können ls -lialle Dateien nach Inode anzeigen." Ich weise darauf hin, dass dies ls -iausreicht, um eine Liste der Dateinamen und der entsprechenden Inode-Nummern zu erhalten. (Aber natürlich brauchen Sie, ls -iawenn Sie Punktedateien einbinden möchten.)
Scott
Es ist besser, die -deleteOption einfach an zu übergeben find, um die Verwendung des falschen Dateinamens zu minimieren.
ScumCoder