Adları ile başlayan bir dosyayı kaldırmak bir -
SSS'dir, ancak farklı bir sorununuz var gibi görünüyor.
Soruda bahsettiğiniz çözümlerden:
rm -- -
Bu çalışması gerekir.
rm "-"
Bundan farklı değil rm -
. Tırnaklar kabuk tarafından çıkarılır ve rm
komut sadece tek tireyi argüman olarak görür. Tırnak işaretleri, kabuk meta karakterlerinden kaçmak için kullanışlıdır; tire, rm
kabuk için özel değildir.
rm "\-"
Tırnak işaretleri ters eğik çizgiden kaçar, bu nedenle adı iki karakterden oluşan bir dosyayı, ters eğik çizgiyi ve kısa çizgiyi kaldırmaya çalışır.
rm \-
Bu da rm "-"
aynı şekilde rm -
.
Olduğu gibi, en azından GNU coreutils sürümüyle birlikte rm
, rm -
adı yalnızca kısa çizgi içeren bir dosyayı gerçekten kaldırır (veya kaldırmaya çalışır). Dosyanızın adı bu olsaydı, şimdi gitmiş olurdu. Dosyanızın yalnızca kısa çizgi gibi görünen bir adı olduğuna karar verdim .
ls | cat -A
gerçekte ne denildiği hakkında bir fikir vermeli.
İşte şimdi birlikte attığım bir Perl betiği, geçerli dizindeki her dosya için sizden bilgi isteyip istemediğinizi soracaktır. Garanti olmadan sunulur, ancak kısaca test ettim.
#!/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 : Daha az ayrıntılı bir çözüm: Eğer dosyanın adı sadece bir karakterse, rm ?
onu kaldırmalısınız (diğer dosyalarla birlikte).