ich habe es versucht
rm -- -
rm "-"
rm "\-"
rm \-
Hat Perl einen Schuss gegeben
~$ perl -e '$junk = glob("-"); chomp $junk; print "$junk\n"; `rm $junk`;'
-
rm: cannot remove `-': No such file or directory
...und...
~$ perl -e '$junk = glob("-"); chomp $junk; print "$junk\n"; `mv $junk newfile.garbage`;'
-
mv: cannot stat `-': No such file or directory
Jede Unterstützung wäre sehr dankbar, weise Leute.
rm
Version verwenden Sie (rm --version
)?rm -
funktioniert gut mit GNU Coreutils 8.5.rm ./-
Antworten:
Dies wurde früher in den Usenet-FAQs für Unix gepostet - ich sehe es in den GNU Core Utility-FAQs . Es gab mindestens fünf verschiedene Methoden, aber das funktioniert gut:
Wenn ein Dateiname untypisierbare Zeichen enthält, verwenden Sie:
Das
-i
Flag fragt nach einer Bestätigung für jede Datei, ob sie entfernt werden soll oder nicht.quelle
Das Entfernen einer Datei, deren Name mit "" beginnt,
-
ist eine häufig gestellte Frage, aber es sieht so aus, als hätten Sie ein anderes Problem.Von den Lösungen, die Sie in der Frage erwähnt haben:
Das sollte funktionieren.
Das ist nicht anders als
rm -
. Die Anführungszeichen werden von der Shell entfernt, und derrm
Befehl sieht nur den einzelnen Bindestrich als Argument. Anführungszeichen sind nützlich, um Shell-Metazeichen zu maskieren. Der Bindestrich ist speziell fürrm
, nicht für die Shell.Die Anführungszeichen werden vor dem umgekehrten Schrägstrich angezeigt. Dadurch wird versucht, eine Datei zu entfernen, deren Name aus zwei Zeichen besteht, einem umgekehrten Schrägstrich und einem Bindestrich.
Das ist genauso
rm "-"
, äquivalent zurm -
.Da es zumindest mit dem GNU geschieht, coreutils Version
rm
,rm -
tatsächlich entfernt (oder versucht zu entfernen) einen Dateinamen besteht aus nur einem Bindestrich , das. Wenn Ihre Datei diesen Namen hätte, wäre sie inzwischen verschwunden. Ich komme zu dem Schluss, dass Ihre Datei einen Namen hat, der nur wie ein Bindestrich aussieht .sollte eine Vorstellung davon geben, wie es wirklich heißt.
Hier ist ein Perl-Skript, das ich gerade zusammengestellt habe und das Sie auffordert, jede Datei im aktuellen Verzeichnis zu löschen. Wird ohne Garantie angeboten, habe es aber kurz getestet.
BEARBEITEN : Eine weniger aufwändige Lösung: Wenn der Name der Datei nur ein Zeichen ist,
rm ?
sollte er entfernt werden (zusammen mit allen anderen derartigen Dateien).quelle
M-bM-^@M-^S
ist eine Wiedergabe der 3-Byte-UTF-8-Darstellung des Unicode-Zeichens "EN DASH", 0x2013. Ich frage mich, ob Sie es versehentlich von einer Webseite kopiert und eingefügt haben.rm -i *
nicht funktioniert? Scheint, als würde es dasselbe tun wie das Perl-Skript./^y/i
lieber als/y/i
. Schließlich könnte ein russischer Benutzer "Nyet" eingeben.Wenn Sie etwas sichereres wollen ...
Versuchen Sie es mit einer Kombination aus ls und find (dies funktioniert für jede Datei, zu deren Entfernen Sie berechtigt sind).
Der Parameter '-i' gibt Ihnen die Inode-Nummer für jeden Verzeichniseintrag ls -li an
Sobald Sie die Inode-Nummer haben ...
quelle
-exec rm -i {}
geht-i
darum, zum Entfernen aufzufordern . Ich schaueman find
und sehe keinen Weg, das zu tun.Probieren Sie
rm ./-
es aus.Das
-
ist ein Flag, um ein Flag-Argument zu starten. Wenn Sie das Argument mit etwas anderem als einem beginnen-
, wird in diesem Fall/
davon ausgegangen, dass es sich um den Dateinamen handelt. Welches ist, was Sie wünschen.Und da
file
und./file
die gleiche Datei ist, wird die Datei mit dem Namen Ziel-
über./-
.quelle
Nicht so geeky wie die meisten anderen Antworten, aber ich würde eine Instanz von
mc
Midnight Commander starten und einfach die Datei auswählen und löschen.quelle
Versuchen:
um zu sehen, ob der Dateiname nicht druckbare Zeichen enthält.
quelle
Nicht, dass es notwendig sein sollte, hier Perl zu verwenden, aber das sollte funktionieren:
oder um zu sehen, was ein Fehler mit dem oben genannten sein könnte:
quelle
Ich hatte Glück, GNOMEs Nautilus zu verwenden, um falsch benannte Dateien zu entfernen. Betreiben Sie einen X-Server? Ich bin sicher, dass andere Dateibrowser auch funktionieren würden.
quelle
Ob
hat nicht funktioniert, der Dateiname ist nicht "nur ein Bindestrich". Wenn keine anderen Dateien einen Bindestrich enthalten, können Sie es versuchen
quelle
Bisher bekomme ich für jede bisher gepostete Methode ein "No such file or directory":
Es scheint, dass ich rm Version 7.4 habe. Ich werde versuchen, diese Vorschläge zu aktualisieren und erneut zu versuchen. Vielen Dank an alle für die Hilfe.
quelle
Ich verwende sehr gerne den
dired
Modus in Emacs für diese Art von Dingen - öffne einfach das Verzeichnis in Emacs. Sie können Dateien einfach auswählen und zum Löschen markieren.Ein anderes Plakat schlug die Verwendung des Mitternachtskommandanten vor; Dies ist so ziemlich die gleiche Idee, aber wenn Sie bereits ein Emacs-Benutzer sind, ist es vielleicht bequemer.
quelle
Sollte
rm -f '-'
für mich in cygwin arbeiten könnenÜbrigens
rm -
scheint auch Red Hat zu funktionieren.quelle
rm -
funktioniert auch bei mir