การลบไฟล์ที่ชื่อขึ้นต้นด้วย-
คำถามที่พบบ่อย แต่ดูเหมือนว่าคุณมีปัญหาอื่น
จากคำตอบที่คุณพูดถึงในคำถาม:
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 ?
ควรลบออก (พร้อมกับไฟล์อื่น ๆ )