La rimozione di un file il cui nome inizia con -
una FAQ, ma sembra che tu abbia un problema diverso.
Delle soluzioni che hai menzionato nella domanda:
rm -- -
Dovrebbe funzionare.
rm "-"
Non è diverso da rm -
. Le virgolette sono rimosse dalla shell e il rm
comando vede il singolo trattino come argomento. Le virgolette sono utili per sfuggire ai metacaratteri della shell; il trattino è speciale rm
, non per la shell.
rm "\-"
Le virgolette sfuggono alla barra rovesciata, quindi questo tenta di rimuovere un file il cui nome è composto da due caratteri, una barra rovesciata e un trattino.
rm \-
Questo è proprio come rm "-"
, equivalente a rm -
.
A quanto pare, almeno con la versione GNU coreutils di rm
, rm -
effettivamente rimuove (o tenta di rimuovere) un file il cui nome è costituito solo da un trattino. Se il tuo file avesse quel nome, ora sarebbe andato. Concludo che il tuo file ha un nome che sembra solo un trattino.
ls | cat -A
dovrebbe dare un'idea di come si chiama davvero.
Ecco uno script Perl che ho appena messo insieme che ti chiederà ogni file nella directory corrente e ti chiederà se rimuoverlo. Offerto senza garanzia, ma l'ho testato brevemente.
#!/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;
}
}
EDIT : una soluzione meno elaborata: se il nome del file è solo un carattere, rm ?
dovrebbe rimuoverlo (insieme a qualsiasi altro file simile).