La suppression d'un fichier dont le nom commence par -
est une FAQ, mais il semble que vous ayez un problème différent.
Parmi les solutions que vous avez mentionnées dans la question:
rm -- -
Cela devrait fonctionner.
rm "-"
Ce n'est pas différent de rm -
. Les guillemets sont supprimés par le shell et la rm
commande ne considère que le trait d'union comme un argument. Les guillemets sont utiles pour échapper aux métacaractères du shell; le trait d'union est spécial pour rm
, pas à la coquille.
rm "\-"
Les guillemets échappent à la barre oblique inversée. Cette action tente donc de supprimer un fichier dont le nom est composé de deux caractères, une barre oblique inversée et un trait d'union.
rm \-
C'est comme rm "-"
, équivalent à rm -
.
En fait, du moins avec la version GNU coreutils de rm
, rm -
supprime (ou tente de supprimer) un fichier dont le nom se compose uniquement d’un trait d’union. Si votre fichier avait ce nom, il serait déjà parti. Je conclus que votre fichier a un nom qui ressemble à un trait d'union.
ls | cat -A
devrait donner une idée de ce que ça s'appelle vraiment.
Voici un script Perl que je viens de rassembler pour vous demander d'indiquer chaque fichier du répertoire en cours et de vous demander si vous souhaitez le supprimer. Offert sans garantie, mais je l'ai testé brièvement.
#!/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 : Une solution moins élaborée: si le nom du fichier n’est qu’un caractère, il rm ?
convient de le supprimer (ainsi que tout autre fichier de ce type).