A remoção de um arquivo cujos nomes começam -
é uma FAQ, mas parece que você tem um problema diferente.
Das soluções que você mencionou na pergunta:
rm -- -
Isso deve funcionar.
rm "-"
Isso não é diferente de rm -
. As aspas são removidas pelo shell, e o rm
comando apenas vê o hífen único como argumento. As aspas são úteis para escapar dos metacaracteres do shell; o hífen é especial para rm
, não para o shell.
rm "\-"
As aspas escapam da barra invertida; portanto, isso tenta remover um arquivo cujo nome consiste em dois caracteres, uma barra invertida e um hífen.
rm \-
Isto é como rm "-"
, equivalente a rm -
.
Por acaso, pelo menos com a versão GNU coreutils rm
, rm -
na verdade remove (ou tenta remover) um arquivo cujo nome consiste apenas em um hífen. Se seu arquivo tivesse esse nome, ele já estaria esgotado. Concluo que seu arquivo tem um nome que se parece apenas com um hífen.
ls | cat -A
deve dar uma idéia do que realmente é chamado.
Aqui está um script Perl que acabei de juntar que solicitará cada arquivo no diretório atual e perguntará se deseja removê-lo. Oferecido sem garantia, mas eu o testei 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 : Uma solução menos elaborada: se o nome do arquivo for apenas um caractere, rm ?
remova-o (junto com outros arquivos).