名前がで始まるファイルを削除するの-
はよくある質問ですが、別の問題があるようです。
あなたが質問で言及した解決策のうち:
rm -- -
それはうまくいくはずです。
rm "-"
それはから違いはありませんrm -
。引用符はシェルによって削除され、rm
コマンドは引数として単一のハイフンを見るだけです。引用符は、シェルのメタキャラクターをエスケープするのに役立ちます。ハイフンはrm
、シェルではなくに特別です。
rm "\-"
引用符はバックスラッシュをエスケープするため、名前がバックスラッシュとハイフンの2文字で構成されるファイルを削除しようとします。
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;
}
}
編集:それほど複雑ではない解決策:ファイルの名前が1文字だけの場合は、rm ?
(他の同様のファイルと一緒に)それを削除する必要があります。