Usuwanie pliku, którego nazwy zaczynają się od, -
to często zadawane pytania, ale wygląda na to, że masz inny problem.
Z rozwiązań wymienionych w pytaniu:
rm -- -
To powinno działać.
rm "-"
To nie różni się od rm -
. Cudzysłowy są usuwane przez powłokę, a rm
polecenie widzi tylko pojedynczy myślnik jako argument. Znaki cudzysłowu są przydatne do unikania metaznaków powłoki; łącznik jest specjalny dla rm
, a nie dla powłoki.
rm "\-"
Znaki cudzysłowu uciekają przed odwrotnym ukośnikiem, więc próbuje usunąć plik, którego nazwa składa się z dwóch znaków, odwrotnego ukośnika i łącznika.
rm \-
To jest tak jak rm "-"
odpowiednik rm -
.
Jak to się dzieje, przynajmniej z GNU Coreutils wersję rm
, rm -
rzeczywiście Usuwa (lub próby usunięcia) pliku, którego nazwa składa się tylko z myślnikiem. Gdyby twój plik miał taką nazwę, już by go nie było. Doszedłem do wniosku, że twój plik ma nazwę, która tylko przypomina myślnik.
ls | cat -A
powinien dać wyobrażenie o tym, jak to się naprawdę nazywa.
Oto skrypt Perla, który właśnie rzuciłem razem, który wyświetli monit o każdy plik w bieżącym katalogu i poprosi o jego usunięcie. Oferowany bez gwarancji, ale krótko go przetestowałem.
#!/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;
}
}
EDYCJA : Mniej skomplikowane rozwiązanie: jeśli nazwa pliku to tylko jeden znak, rm ?
należy go usunąć (wraz z innymi takimi plikami).