Menghapus file yang namanya dimulai dengan -
FAQ, tetapi sepertinya Anda memiliki masalah yang berbeda.
Solusi yang Anda sebutkan dalam pertanyaan:
rm -- -
Itu seharusnya bekerja.
rm "-"
Itu tidak berbeda dari rm -
. Kutipan dilucuti oleh shell, dan rm
perintah hanya melihat tanda hubung tunggal sebagai argumen. Tanda kutip berguna untuk keluar dari karakter meta shell; tanda hubung khusus untuk rm
, bukan untuk shell.
rm "\-"
Tanda kutip lolos dari garis miring terbalik, jadi ini mencoba untuk menghapus file yang namanya terdiri dari dua karakter, garis miring terbalik dan tanda hubung.
rm \-
Ini seperti rm "-"
, setara dengan rm -
.
Seperti yang terjadi, setidaknya dengan versi GNU coreutils rm
, rm -
sebenarnya menghapus (atau upaya untuk menghapus) file yang namanya hanya terdiri dari tanda hubung. Jika file Anda memiliki nama itu, itu akan hilang sekarang. Saya menyimpulkan bahwa file Anda memiliki nama yang hanya terlihat seperti tanda hubung.
ls | cat -A
harus memberi gambaran tentang apa sebutannya.
Ini skrip Perl yang baru saja saya letakkan bersama yang akan meminta Anda untuk setiap file di direktori saat ini dan bertanya apakah akan menghapusnya. Ditawarkan tanpa garansi, tapi saya sudah mengujinya secara singkat.
#!/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 : Solusi yang tidak terlalu rumit: jika nama file hanya satu karakter, maka rm ?
harus menghapusnya (bersama dengan file lain yang sejenis).