Видалення файлу, з імен якого починається, -
- це FAQ, але, схоже, у вас є інша проблема.
З рішень, які ви згадали у запитанні:
rm -- -
Це має спрацювати.
rm "-"
Це нічим не відрізняється від rm -
. Цитати викреслені оболонкою, і rm
команда просто бачить окремий дефіс як аргумент. Лапки корисні для уникнення метахарактерів оболонки; дефіс особливий rm
, а не оболонці.
rm "\-"
Лапки уникають зворотної косої риси, тому це намагається видалити файл, ім'я якого складається з двох символів, зворотної косої риски та дефісу.
rm \-
Це так само rm "-"
, як і рівнозначно rm -
.
Як це буває, принаймні з версією GNU coreutils rm
, rm -
фактично видаляє (або намагається видалити) файл, ім'я якого складається лише з дефісу. Якби у вашому файлі було таке ім'я, воно б уже минуло. Я роблю висновок, що у вашому файлі є ім’я, яке виглядає лише як дефіс.
ls | cat -A
має дати уявлення про те, як це насправді називається.
Ось сценарій Perl, який я щойно зібрав разом, який підкаже вам кожен файл у поточному каталозі та запитає, чи потрібно його видаляти. Пропонується без гарантії, але я її коротко перевірив.
#!/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 : Менш продумане рішення: якщо ім'я файлу є лише одним символом, його rm ?
слід видалити (разом з будь-якими іншими такими файлами).