ความแตกต่างระหว่าง rmdir และ rm -r


9

ฉันมักจะลบไดเรกทอรีโดยใช้rm :

rm -r myDir

อย่างไรก็ตามฉันตระหนักถึงคำสั่งอื่นrmdirซึ่งดูเหมือนว่าจะทำงานเช่นกัน:

rmdir myDir

อะไรคือความแตกต่างระหว่างสองคำสั่งนี้และเมื่อใดควรใช้แต่ละคำสั่ง


2
rmdir ของคุณทำงานหากมีไฟล์ในไดเรกทอรีย่อยหรือไม่?
Jeff Schaller

1
ดูเพิ่มเติมการเรียกระบบบาร์นี้rmdir(2)ซึ่งสามารถลบไดเรกทอรีว่างได้เท่านั้น
David Foerster

4
ยังrm -rไงก็ตามมีขั้นตอน "ถูกต้อง" สำหรับการใช้: (1) พิมพ์คำสั่ง แต่ไม่ต้องป้อน (2) ยกมือออกจากคีย์บอร์ด (3) นับถึงห้า (4) กด ENTER ฉันเริ่มทำสิ่งนี้ด้วยคำสั่งที่เป็นอันตรายทั้งหมดเพื่อให้โอกาสฉันดูสิ่งที่ฉันกำลังทำอยู่ตรวจสอบให้แน่ใจว่าฉันพิมพ์สิ่งต่าง ๆ อย่างถูกต้องคิดว่าอาจมีผลที่ไม่คาดคิด ฯลฯ ในบางครั้งสิ่งนี้ทำให้ฉัน เพื่อลบคำสั่งของฉันและทำการตรวจสอบพิเศษก่อนเช่น
ajb

3
@ajb rm -rf ~ /*- ล้างไดเรกทอรีบ้านของฉัน หรือรออาจจะทำความสะอาดระบบ ดีเสมอที่จะตรวจสอบอีกครั้ง;)
Tom Carpenter

1
@ajb โปรดสังเกตว่าrmdirและrm -rมีสองสายที่มีความยาวเท่ากัน :-)
Kusalananda

คำตอบ:


14

rm -rลบไดเรกทอรีและเนื้อหาทั้งหมด; rmdirจะลบไดเรกทอรีเฉพาะเมื่อไดเรกทอรีว่างเปล่า ฉันต้องการใช้สิ่งต่อไปนี้เพื่อลบไดเรกทอรีและเนื้อหาทั้งหมด:

rm -rf <directory_to_be_removed>

17
โปรดทราบว่าโดยปกติคุณไม่ควรใช้-fหากคุณไม่ต้องการ มีประโยชน์ในการใช้งาน-rfทุกครั้ง แต่ปิดใช้งาน (เกือบ) ตรวจสอบความปลอดภัยทั้งหมด
อัลโล

5
-1 สำหรับคำแนะนำที่ไม่จำเป็นของ-fธงของ rm ซึ่งอาจมีผลที่คาดไม่ถึงและไม่สามารถย้อนกลับได้
cat

ดังนั้นrmdirเป็นเพียงrm -d?
Stan Strum

@StanStrum ไม่ได้เป็นตัวเลือกมาตรฐาน-d rm
Kusalananda

@cat rmคำสั่งโดยทั่วไปอาจมีผลกระทบเหล่านี้ การ-fตั้งค่าสถานะมีประโยชน์เมื่อทำงานภายใต้set -eในสคริปต์ ฉันยอมรับว่าการใช้โดยไม่คิดคือไม่จำเป็น
Kusalananda

1

คุณควรใช้ rm -rเมื่อต้องการลบไดเรกทอรีซ้ำและเนื้อหาทั้งหมดซ้ำหรือเมื่อเป้าหมายอาจเป็นไดเรกทอรีหรือไฟล์และคุณต้องการลบโดยไม่คำนึงว่ามันคืออะไร

คุณควรใช้ rmdirเมื่อต้องการลบไดเรกทอรีว่าง

rmdirคำสั่งจะเป็นประโยชน์เพราะมันปฏิเสธที่จะลบไดเรกทอรีที่ไม่ว่างเปล่าและไฟล์ สิ่งนี้ทำหน้าที่เป็นตัวตรวจจับความปลอดภัยในสถานการณ์ที่คุณอาจต้องการแน่ใจว่าสิ่งที่คุณกำลังลบคือไดเรกทอรีและไดเรกทอรีนั้นว่างเปล่าก่อนที่จะลบมัน (ตัวอย่างเช่นในสคริปต์) และต้องการที่จะถือว่าเป็นเงื่อนไขข้อผิดพลาด มิฉะนั้น.

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