Remover um arquivo cujos nomes começam com -
é 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 comando rm
apenas vê o hífen único como um argumento. Aspas são úteis para escapar de metacaracteres de shell; o hífen é especial para rm
, não para o shell.
rm "\-"
As aspas escapam da barra invertida, portanto, tenta remover um arquivo cujo nome consiste em dois caracteres, uma barra invertida e um hífen.
rm \-
Isso é igual a rm "-"
, equivalente a rm -
.
Por acaso, pelo menos com a versão GNU dos utilitários básicos de rm
, rm -
realmente remove (ou tenta remover) um arquivo cujo nome consiste em apenas um hífen. Se o seu arquivo tivesse esse nome, já teria desaparecido. Concluo que seu arquivo tem um nome que apenas parece um hífen.
ls | cat -A
deve dar uma ideia do que é realmente chamado.
Aqui está um script em Perl que eu apenas joguei juntos, que irá pedir-lhe para cada arquivo no diretório atual e perguntar se deseja removê-lo. Oferecido sem garantia, mas testei rapidamente.
#!/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 é apenas um caractere, então rm ?
deve removê-lo (junto com qualquer outro arquivo).