Удаление файла, чьи имена начинаются с, -
- это часто задаваемые вопросы, но похоже, что у вас другая проблема.
Из решений, которые вы упомянули в вопросе:
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;
}
}
РЕДАКТИРОВАТЬ : менее сложное решение: если имя файла только один символ, то rm ?
следует удалить его (вместе с любыми другими такими файлами).