เนื่องจากฉันคิดว่าคำถามนี้เกี่ยวกับสิ่งที่ * ทำ (ไม่ใช่ไม่ใช่ rm) ให้ลองใช้วิธีอื่น
หากคุณไม่แน่ใจในสิ่งที่ * ทำคุณสามารถ "ทดสอบ" ก่อนโดยใช้คำสั่งที่ไม่เป็นอันตรายเช่น echo ก่อนที่คุณจะเรียกใช้สิ่งนี้ให้ลองเดาว่าพวกเขาจะแสดงอะไรถ้าคุณเรียกใช้พวกมันใน dir ที่บ้านของคุณ
echo *
echo .*
แต่ก่อนอื่นเรามาสร้างสนามเด็กเล่นกันเพื่อที่เราจะได้เล่นกับดวงดาวและดูว่าเราจะจบลงด้วย
mkdir ~/star_test/
cd ~/star_test/
>.file1
>file2
ตอนนี้เรามีสิ่งนี้:
cj@zap:~/star_test$ ls -1a
.
..
.file1
file2
ตอนนี้สังเกตสิ่งที่ * ขยายเข้าไปในการใช้คำสั่ง echo:
cj@zap:~/star_test$ echo *
file2
cj@zap:~/star_test$ echo .*
. .. .file1
ลองดูว่าเกิดอะไรขึ้นกับคำสั่ง rm
cj@zap:~/star_test$ rm -rf *
cj@zap:~/star_test$ ls -1a
.
..
.file1
อย่างที่คุณเห็นเขาเพิ่งลบไฟล์ 2 เท่านั้นเนื่องจาก * ขยายเป็น file2 เท่านั้น หากคุณต้องการพิมพ์ rm -rf. * ซึ่งจะเหมือนกับการเขียน
rm -rf . .. .file1
และบอกตามตรงว่าไม่สนุก;)
หวังว่าสิ่งนี้จะอธิบายส่วนของคำถามของคุณได้อย่างชัดเจน
อัปเดต:
อย่างไรก็ตามตามที่ Ankur Goel ชี้ให้เห็นว่ามีการป้องกันบางอย่างในตัว rm (ชนิดที่ผิดปกติสำหรับคำสั่งเชลล์ :)
มาสร้างสนามเด็กเล่นใหม่กัน:
cd ~/star_test/
mkdir -p test1/test2/test3
sudo chown root.root test1
cd test1/test2/test3/
>.file1
>file2
ดังนั้นตอนนี้เรามีสิ่งนี้อีกครั้ง แต่ด้วย root test1 ที่เป็นเจ้าของโดยมีการป้องกันถ้า rm เริ่มมีปัญหามากขึ้น
cj@zap:~/star_test/test1/test2/test3$ ls -a
. .. file2 .file1
cj@zap:~/star_test/test1/test2/test3$ echo .*
. .. .file1
ดังนั้นเราจะลบทุกอย่าง:
cj@zap:~/star_test/test1/test2/test3$ rm -rf .*
rm: cannot remove directory `.'
rm: cannot remove directory `..'
cj@zap:~/star_test/test1/test2/test3$ ls -a
. .. file2
และดูเหมือนว่า RM ไม่ได้ลบ และ .. ถึงแม้ว่าเราจะบอกให้เขา !!!
ดังนั้นหลังจากคำตอบที่ยาวนานมันกลับกลายเป็นว่าปลอดภัยที่จะลบทุกอย่างใน dir ด้วยวิธีนี้:
rm -rf * .*
แต่ฉันจะใช้มันด้วยความระมัดระวังเนื่องจากฉันไม่แน่ใจว่าการใช้งาน rm ทั้งหมดจะทำงานแบบนี้!
rm -rf ./*
และระบุไดเรกทอรีปัจจุบันอย่างชัดเจน ... แต่ดูเหมือนว่า Ankur จะบอกว่ามันไม่สำคัญเลย