วิธีลบไฟล์และไดเรกทอรีผ่านเทอร์มินัลอย่างรวดเร็ว (bash shell) [ปิด]


331

จากหน้าต่างเทอร์มินัล:

เมื่อฉันใช้rmคำสั่งมันสามารถลบไฟล์ได้เท่านั้น
เมื่อฉันใช้rmdirคำสั่งมันจะลบเฉพาะโฟลเดอร์ที่ว่างเปล่า

หากฉันมีไดเรกทอรีซ้อนอยู่กับไฟล์และโฟลเดอร์ภายในโฟลเดอร์ที่มีไฟล์และอื่น ๆ มีวิธีใดที่จะลบไฟล์และโฟลเดอร์ทั้งหมดโดยไม่ต้องพิมพ์คำสั่งที่มีพลังทั้งหมด

หากสร้างความแตกต่างฉันใช้ mac bash shell จากเทอร์มินัลไม่ใช่ Microsoft DOS หรือ linux


ในกรณีที่คุณต้องการกู้คืนไฟล์ในอนาคตห้ามใช้ "rm" ในกรณีดังกล่าว ใช้ "rm-trash": github.com/nateshmbhat/rm-trash
Natesh bhat

คำตอบ:


760
rm -rf some_dir

-r "recursive" -f "force" (ไม่แสดงข้อความยืนยัน)

ระวัง!


26
+1 และดีใจที่คุณเพิ่ม "ระวัง!" ส่วนหนึ่ง ... คำสั่ง "Sawzall" ที่สามารถเปลี่ยนวันที่ดีให้เป็นวันที่แย่ได้อย่างรวดเร็ว .. หากใช้อย่างประมาท
itsmatt

5
เหมือนไม่ทำ "# rm -rf /" คุณจะเสียใจที่:
DarthVader

1
@itsmatt: คุณรู้ว่าสิ่งที่พวกเขาพูด ... ให้ Sawzall กับใครบางคนและทุกปัญหาก็ดูเหมือนว่าเวลาของความสนุก!
Jim Lewis เมื่อ

164
บน Mac หรือ ทำสิ่งนี้แทน: brew install trashจากนั้นtrash -rf some_dirสิ่งนี้จะย้ายไดเรกทอรีที่ไม่ต้องการไปยังถังขยะของคุณแทนที่จะหายไปจากเพรสทีจ - สไตล์ในอีเธอร์ ( แหล่งที่มา )
zakdances

4
วิธี "ขยะ" นั้นยอดเยี่ยมมาก!
anopres

59
rm -rf *

จะลบทุกอย่าง (โฟลเดอร์ & ไฟล์) ในไดเรกทอรีปัจจุบัน

แต่ระวังด้วย! รันคำสั่งนี้เฉพาะเมื่อคุณแน่ใจอย่างยิ่งว่าคุณอยู่ในไดเรกทอรีที่ถูกต้อง


17
rm -rf เป็นคำสั่งที่มีความเสี่ยงมากคุณควรระวังและระบุโฟลเดอร์ที่จะลบ
eomeroff

8
วิธีการเกี่ยวกับการทำงานls -R *ก่อนเพื่อดูสิ่งที่จะถูกลบโดยrm -rf *
Hammad Khan

มันใช้งานได้ดีสำหรับฉันขอบคุณ
โมนิก้าHübner

14

ใช่แล้ว -rตัวเลือกที่บอกrmจะเป็นR ecursive และลบลำดับชั้นของไฟล์ทั้งหมดที่หยั่งรากในข้อโต้แย้งของตน ในคำอื่น ๆ rmdirหากได้รับไดเรกทอรีจะลบเนื้อหาทั้งหมดแล้วดำเนินการสิ่งที่เป็นอย่างมีประสิทธิภาพ

อีกสองตัวเลือกที่คุณควรรู้ว่ามีอยู่และ -i ย่อมาจากi nteractive; มันทำให้คุณก่อนที่จะลบแต่ละไฟล์และทุก ย่อมาจากf orce; มันไปข้างหน้าและลบทุกอย่างโดยไม่ถาม ปลอดภัยกว่า แต่เร็วกว่า ใช้งานเฉพาะในกรณีที่คุณแน่ใจว่าคุณกำลังลบสิ่งที่ถูก คุณสามารถระบุสิ่งเหล่านี้ด้วยหรือไม่; มันเป็นการตั้งค่าอิสระ-f-irm-f-i-f-r

และตามปกติคุณสามารถรวมสวิทช์: rm -r -iเป็นเพียงrm -riและเป็นrm -r -frm -rf

นอกจากนี้โปรดทราบว่าสิ่งที่คุณเรียนรู้จะนำไปใช้bashกับทุก Unix OS: OS X, Linux, FreeBSD และอื่น ๆ ความจริงแล้วrmไวยากรณ์ของมันเหมือนกันในทุก ๆ เชลล์ในทุก ๆ ระบบปฏิบัติการ Unix OS X ภายใต้ประทุนนั้นเป็นระบบ BSD Unix จริงๆ


1
แม้ว่าตัวเลือกทั้งหมดที่กล่าวถึงข้างต้นนั้นเป็นมาตรฐานในบรรดารสชาติของ Unix ที่ปรากฏในรายการ แต่ก็มีความแตกต่างเช่นกัน ตัวอย่างเช่น OS X (แต่ไม่ใช่ Linux) มี"rm -d"ซึ่งจะลบไฟล์หรือไดเรกทอรีว่าง ยังคง +1 สำหรับจุดที่ OS X เป็น BSD ภายใน
David Gelhar

True --- POSIX subsetรับประกันได้ว่าจะทำงานได้อย่างสม่ำเสมอใน Unixen แต่ทุกอย่างที่อยู่ข้างนอกอาจจะใช่หรือไม่ใช่ก็ได้
Antal Spector-Zabusky

2

ดังนั้นฉันจึงมองหาวิธีที่จะลบไฟล์ทั้งหมดในไดเรกทอรียกเว้นบางไดเรกทอรีและไฟล์ฉันต้องการเก็บไว้รอบ ๆ หลังจากค้นหามากฉันคิดวิธีทำโดยใช้ find

find -E . -regex './(dir1|dir2|dir3)' -and -type d -prune -o -print -exec rm -rf {} \;

เป็นหลักมันใช้ regex เพื่อเลือกไดเรกทอรีที่จะแยกออกจากผลลัพธ์จากนั้นลบไฟล์ที่เหลือ แค่อยากจะเอามันออกมาที่นี่ในกรณีที่คนอื่นต้องการมัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.