ใช่rm *.xvg
จะลบไฟล์ที่ลงท้ายด้วย.xvg
ในไดเรกทอรีปัจจุบันของคุณเท่านั้น นี่คือเหตุผล
เมื่อคุณพิมพ์คำสั่งเช่นนี้งานจะถูกแบ่งระหว่างเชลล์ที่คุณใช้ (สมมติว่าใช้ bash) และไบนารีคำสั่ง
which rm
คุณสามารถค้นหาไบนารีโดยการพิมพ์ โปรแกรมเล็ก ๆ นี้ดูแลการยกเลิกการเชื่อมโยงไฟล์ โปรแกรมเช่นนี้สามารถเริ่มต้นได้จากบรรทัดคำสั่งและสามารถอ่านรายการอาร์กิวเมนต์prog arg1 arg2 arg3
เมื่อเริ่มต้น ในกรณีของไฟล์rm
เหล่านั้นจะถูกตีความเป็นรายการชื่อไฟล์ที่ผ่านการรับรองโดยสมบูรณ์เพื่อลบ ดังนั้นถ้าคุณอยู่ในไดเรกทอรีที่มีไฟล์foo.bar
พิมพ์จะส่งผลให้delete 'foo.*'
rm: foo.*: No such file or directory
สังเกตเครื่องหมายคำพูดเดี่ยวรอบ ๆ รูปแบบไฟล์โดยบอกให้เชลล์ส่งอาร์กิวเมนต์ไปยังเชลล์ตามที่เป็นอยู่
อย่างไรก็ตามหากคุณพิมพ์rm *.bar
ในไดเรกทอรีเดียวกันมันจะลบไฟล์ สิ่งที่เกิดขึ้นที่นี่คือเชลล์ของคุณซึ่งเป็นโปรแกรมที่คุณใช้พิมพ์คำสั่งทำการแปลงบางอย่างก่อนส่งอาร์กิวเมนต์ไปยังคำสั่ง หนึ่งในนั้นเรียกว่า 'การขยายชื่อไฟล์' มิฉะนั้นจะรู้ว่าเป็น 'การวนซ้ำ' คุณสามารถดูรายการของไฟล์ทุบตีขยายชื่อที่นี่ หนึ่งในการขยายที่พบมากที่สุดคือ*
ซึ่งขยายไปยังชื่อไฟล์ในไดเรกทอรีปัจจุบัน
วิธีง่ายๆในการดู globs ในที่ทำงานคือการใช้echo
ซึ่งจะพิมพ์กลับอาร์กิวเมนต์ทั้งหมดที่ส่งไปยังมันผ่านเปลือก ดังนั้นการพิมพ์ในออกจะไดเรกทอรีเดียวกันecho *
foo.bar
ดังนั้นเมื่อคุณพิมพ์rm *.bar
สิ่งที่เกิดขึ้นจริงคือเชลล์ขยายรายการอาร์กิวเมนต์ไปที่foo.bar
จากนั้นส่งผ่านไปยังrm
คำสั่ง
มีวิธีการบางอย่างในการควบคุมกลม ในเวอร์ชันล่าสุดของ bash เช่นคุณสามารถเปิดตัวเลือกที่เรียกว่า globstar ซึ่งจะทำการขยายซ้ำ การพิมพ์echo **/*.bar
จะแสดงรายการไฟล์ทั้งหมดที่ลงท้ายด้วย.bar
โฟลเดอร์ย่อยทั้งหมด ดังนั้นการพิมพ์rm **/*.bar
ใน bash ที่เปิดใช้งาน globstar จะเป็นการลบไฟล์ที่ตรงกันทั้งหมดซ้ำในโฟลเดอร์ย่อย
rm -f {*.xvg,.*.xvg}
เพื่อลบไฟล์ที่ซ่อนอยู่ และrm -R -f {*.xvg,.*.xvg}
เพื่อลบไดเรกทอรีด้วย