ฉันรู้ว่าสิ่งนี้จะลบทุกอย่างในไดเรกทอรีย่อยและด้านล่าง:
rm -rf <subdir-name>
แต่คุณจะลบทุกอย่างในไดเร็กทอรีปัจจุบันตลอดจนทุกไดเร็กทอรีย่อยด้านล่างและเนื้อหาของไดเร็กทอรีย่อยทั้งหมดได้อย่างไร
ฉันรู้ว่าสิ่งนี้จะลบทุกอย่างในไดเรกทอรีย่อยและด้านล่าง:
rm -rf <subdir-name>
แต่คุณจะลบทุกอย่างในไดเร็กทอรีปัจจุบันตลอดจนทุกไดเร็กทอรีย่อยด้านล่างและเนื้อหาของไดเร็กทอรีย่อยทั้งหมดได้อย่างไร
คำตอบ:
ฝึกฝนการใช้คอมพิวเตอร์อย่างปลอดภัย เพียงเพิ่มขึ้นหนึ่งระดับในลำดับชั้นและอย่าใช้นิพจน์ตัวแทน:
cd ..; rm -rf -- <dir-to-remove>
ขีดสองขีด--
บอกrm
ว่า<dir-to-remove>
ไม่ใช่ตัวเลือกบรรทัดคำสั่งแม้ว่าจะขึ้นต้นด้วยเครื่องหมายขีดกลางก็ตาม
rm ./
คุณอาจพิมพ์โดยบังเอิญrm . /
ซึ่งอาจเป็นหายนะ
จะลบไฟล์ / ไดเรกทอรีทั้งหมดด้านล่างไฟล์ปัจจุบัน
find -mindepth 1 -delete
หากคุณต้องการทำเช่นเดียวกันกับไดเรกทอรีอื่นที่คุณมีชื่อคุณสามารถตั้งชื่อนั้นได้
find <name-of-directory> -mindepth 1 -delete
หากคุณต้องการที่จะลบไม่เพียง แต่ไดเรกทอรีย่อยและไฟล์ของมัน -mindepth 1
แต่ยังไดเรกทอรีของตัวเองงด ทำโดยไม่ต้อง-delete
รับรายการสิ่งที่จะถูกลบออก
-mindepth 1
ถ้าคุณกำลังระบุไดเร็กทอรี ( find <name-of-directory> -mindepth 1 -delete
) มิฉะนั้นโจฮันเนสจะถูกต้องจะไม่ลบไดเร็กทอรีการทำงานปัจจุบัน (เมื่อใช้find -delete
)
find -mindepth 1 -delete
แต่ฉันได้รับ illegal option -- m
แต่มันใช้งานได้ดีเมื่อฉันลบตัวเลือก mindepthfind . -delete
สิ่งที่ฉันมักจะทำคือการพิมพ์
rm -rf *
และจากนั้นกด * ESC-และทุบตีจะขยาย * ไปยังรายการที่ชัดเจนของไฟล์และไดเรกทอรีในไดเรกทอรีการทำงานปัจจุบัน
ประโยชน์คือ:
อันที่จริงฉันชอบสิ่งนี้มากจนทำให้เป็นพฤติกรรมเริ่มต้นสำหรับ TAB ด้วยบรรทัดนี้ใน. bashrc:
bind TAB:insert-completions
--
คำตอบนี้หายไปหรือไม่ วิธีนี้ยอดเยี่ยมโดยรวมต้องบอกว่า
ใช้
rm -rf *
อัปเดต: .
ย่อมาจากไดเรกทอรีปัจจุบัน แต่เราไม่สามารถใช้สิ่งนี้ได้ คำสั่งที่ดูเหมือนว่าจะมีการตรวจสอบที่ชัดเจนสำหรับและ.
..
ใช้ไวลด์การ์ด globbing แทน แต่อาจมีความเสี่ยง
IMO เวอร์ชันที่ปลอดภัยกว่าคือการใช้:
rm -ri *
(สิ่งนี้จะแจ้งให้คุณยืนยันก่อนที่จะลบทุกไฟล์ / ไดเร็กทอรี)
ถูกต้องที่rm –rf .
จะลบทุกอย่างในปัจจุบันโดยตรงรวมถึงไดเรกทอรีย่อยและเนื้อหา จุดเดียว ( .
) หมายถึงไดเรกทอรีปัจจุบัน ระวังอย่าทำrm -rf ..
เนื่องจากจุดคู่ ( ..
) หมายถึงไดเร็กทอรีก่อนหน้า
สิ่งนี้ถูกกล่าวว่าถ้าคุณเป็นเหมือนฉันและเปิดหน้าต่างเทอร์มินัลหลายเครื่องพร้อมกันคุณควรปลอดภัยและใช้rm -ir .
Lets ดูอาร์กิวเมนต์คำสั่งเพื่อทำความเข้าใจว่าทำไม
ขั้นแรกถ้าคุณดูที่หน้าrm
command man ( man rm
ภายใต้ Unix ส่วนใหญ่) คุณสังเกตเห็นว่า–r
"ลบเนื้อหาของไดเรกทอรีแบบวนซ้ำ" ดังนั้นการทำrm -r .
คนเดียวจะลบทุกอย่างในไดเร็กทอรีปัจจุบันและทุกอย่างก็ร้อง
ในrm –rf .
-f ที่เพิ่มหมายถึง "ละเว้นไฟล์ที่ไม่มีอยู่ไม่ต้องแจ้ง" คำสั่งนั้นจะลบไฟล์และไดเร็กทอรีทั้งหมดในไดเร็กทอรีปัจจุบันและไม่แจ้งให้คุณยืนยันว่าคุณต้องการทำเช่นนั้นจริงๆ -f
เป็นอันตรายอย่างยิ่งหากคุณเรียกใช้คำสั่งภายใต้ผู้ใช้ที่มีสิทธิ์เนื่องจากคุณสามารถลบเนื้อหาของไดเร็กทอรีใด ๆ โดยไม่ได้รับโอกาสให้แน่ใจว่าเป็นสิ่งที่คุณต้องการจริงๆ
ในrm -ri .
ทางกลับกัน-i
ซึ่งจะแทนที่-f
วิธีการ "แจ้งก่อนการลบ" ซึ่งหมายความว่าคุณจะมีโอกาสพูดว่า "oups! that's not what I want" ก่อนที่ rm จะลบไฟล์ทั้งหมดอย่างมีความสุข
ในวันแรกของฉันฉันทำrm -rf /
ระบบในขณะที่เข้าสู่ระบบด้วยสิทธิ์เต็มรูปแบบ (root) ผลที่ได้คือสองวันผ่านไปการกู้คืนระบบจากการสำรองข้อมูล นั่นเป็นเหตุผลที่ตอนนี้ผมจ้างrm -ri
ในขณะนี้
rm -rf *
อย่าทำ! มันอันตราย! ตรวจสอบให้แน่ใจว่าคุณอยู่ในทิศทางที่ถูกต้อง!
ตรวจสอบให้แน่ใจคุณอยู่ในไดเร็กทอรีที่ถูกต้อง
rm -rf *
วิธีแก้ปัญหาทั่วไปที่ปลอดภัยและง่ายที่สุดนี้น่าจะเป็น:
find -mindepth 1 -maxdepth 1 -print0 | xargs -0 rm -rf
ฉันเชื่อว่าคำตอบนี้ดีกว่า:
/unix/12593/how-to-remove-all-the-files-in-a-directory
หากไดเรกทอรีระดับบนสุดของคุณเรียกว่าเรียกแล้ว
images
rm -r images/*
สิ่งนี้ใช้ตัวดำเนินการ shell glob*
เพื่อรันrm -r
บนทุกไฟล์หรือไดเร็กทอรีภายในอิมเมจ
โดยพื้นฐานแล้วคุณขึ้นไปหนึ่งระดับแล้วพูดว่าลบทุกอย่างในไดเรกทอรี X ด้วยวิธีนี้คุณจะยังคงระบุว่าโฟลเดอร์ใดควรมีการลบเนื้อหาซึ่งปลอดภัยกว่าเพียงแค่พูดว่า "ลบทุกอย่างที่นี่" ในขณะที่ยังคงรักษาโฟลเดอร์เดิมไว้ (ซึ่งบางครั้งคุณต้องการเพราะคุณไม่ได้รับอนุญาตหรือไม่ต้องการ เพื่อแก้ไขสิทธิ์ที่มีอยู่ของโฟลเดอร์)