एक ऐसी फ़ाइल को हटाना जिसका नाम -
एफएक्यू है, लेकिन ऐसा लगता है कि आपको एक अलग समस्या है।
प्रश्न में वर्णित समाधानों में से:
rm -- -
वह काम करना चाहिए।
rm "-"
वह इससे अलग नहीं है rm -
। उद्धरण शेल द्वारा छीन लिए गए हैं, और rm
कमांड केवल एकल हाइफन को एक तर्क के रूप में देखता है। शेल मेटाचैकर से बचने के लिए उद्धरण चिह्न उपयोगी हैं; हाइफ़न के लिए विशेष है rm
, शेल के लिए नहीं।
rm "\-"
उद्धरण चिह्न बैकस्लैश से बच जाते हैं, इसलिए यह एक फ़ाइल को हटाने का प्रयास करता है, जिसके नाम में दो वर्ण, एक बैकस्लैश और एक हाइफ़न शामिल हैं।
rm \-
यह बिलकुल वैसा ही है rm "-"
, जैसा है rm -
।
जैसा कि होता है, कम से कम जीएनयू कोरुटिल्स संस्करण के साथ rm
, rm -
वास्तव में एक फ़ाइल को निकालता है (या हटाने का प्रयास करता है) जिसका नाम सिर्फ एक हाइफ़न होता है। यदि आपकी फ़ाइल में यह नाम है, तो यह अब तक चला जाएगा। मैं यह निष्कर्ष निकालता हूं कि आपकी फ़ाइल का एक नाम है जो केवल एक हाइफ़न की तरह दिखता है ।
ls | cat -A
यह वास्तव में क्या कहा जाता है की एक विचार देना चाहिए।
यहाँ एक पर्ल स्क्रिप्ट है जिसे मैंने अभी-अभी एक साथ फेंक दिया है जो आपको वर्तमान निर्देशिका में प्रत्येक फ़ाइल के लिए संकेत देगा और पूछेगा कि क्या इसे निकालना है। वारंटी के बिना की पेशकश की, लेकिन मैं इसे संक्षेप में परीक्षण किया है।
#!/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 ?
उसे हटा देना चाहिए (साथ में ऐसी अन्य फाइलें)।