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:
rm -- -
Das sollte funktionieren.
rm "-"
Das ist nicht anders als rm -
. Die Anführungszeichen werden von der Shell entfernt, und der rm
Befehl sieht nur den einzelnen Bindestrich als Argument. Anführungszeichen sind nützlich, um Shell-Metazeichen zu maskieren. Der Bindestrich ist speziell für rm
, nicht für die Shell.
rm "\-"
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.
rm \-
Das ist genauso rm "-"
, äquivalent zu rm -
.
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 .
ls | cat -A
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.
#!/usr/bin/perl
use strict;
use warnings;
$| = 1;
opendir my $DIR, '.' or die ".: $!\n";
my @files = sort grep { -f $_ } readdir $DIR;
closedir $DIR;
foreach my $file (@files) {
print "Remove $file? ";
my $answer = scalar <>;
if ($answer =~ /^[Yy]/) {
unlink $file or warn "$file: $!\n";
}
elsif ($answer =~ /^[Qq]/) {
exit 0;
}
}
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).