Eliminar un archivo cuyos nombres comienzan con -
es una pregunta frecuente, pero parece que tienes un problema diferente.
De las soluciones que mencionó en la pregunta:
rm -- -
Eso debería funcionar.
rm "-"
Eso no es diferente de rm -
. El shell elimina las comillas, y el rm
comando solo ve el guión simple como un argumento. Las comillas son útiles para escapar de metacaracteres de shell; el guión es especial para rm
, no para la concha.
rm "\-"
Las comillas escapan de la barra diagonal inversa, por lo que intenta eliminar un archivo cuyo nombre consta de dos caracteres, una barra diagonal inversa y un guión.
rm \-
Esto es igual rm "-"
, equivalente a rm -
.
De hecho, al menos con la versión de GNU coreutils rm
, en rm -
realidad elimina (o intenta eliminar) un archivo cuyo nombre consiste solo en un guión. Si su archivo tuviera ese nombre, ya se habría ido. Concluyo que su archivo tiene un nombre que solo parece un guión.
ls | cat -A
debería dar una idea de cómo se llama realmente.
Aquí hay un script de Perl que acabo de crear que le pedirá cada archivo en el directorio actual y le preguntará si desea eliminarlo. Se ofrece sin garantía, pero lo probé 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;
}
}
EDITAR : Una solución menos elaborada: si el nombre del archivo es solo un carácter, rm ?
debería eliminarlo (junto con cualquier otro archivo de este tipo).