ฉันจะลบไดเรกทอรีว่างทั้งหมดได้อย่างไร


11

(บนระบบ Linux)

ฉันมีชุดย่อยที่ซ้อนกันขนาดใหญ่บนระบบไฟล์ ฉันต้องการตัดเส้นทางไดเรกทอรีทั้งหมดที่ไม่มีไฟล์เลย

ในคำอื่น ๆ ฉันต้องการลบทุกไดเรกทอรีที่ไม่มีไฟล์ในไดเรกทอรีนั้นหรือในไดเรกทอรีย่อยใด ๆ ของไดเรกทอรีนั้นซ้ำ

คำตอบ:


15

สำหรับการค้นหาทุกรุ่น

find -depth -type d -empty -exec rmdir {} \;

หากคุณมีรุ่นที่ใหม่กว่า

 find -type d -empty -delete

เท่ไม่รู้จัก-deleteธง
ansi_lumen

ฉันก็ไม่เหมือนกัน. ฉันเรียนรู้สิ่งใหม่ ฉันเคยเขียนสคริปต์มาก่อนโดยใช้การสอบถามซ้ำเพื่อค้นหาไดเรกทอรีว่าง ทำให้งานนั้นง่ายขึ้นมาก
James

2
ya flag -empty ช่วยได้จริงๆที่นี่ นอกจากนี้ยังทำงานเพื่อค้นหาไฟล์ที่ว่างถ้าคุณไม่ได้รวม -type d หรือเพิ่งใช้ -type f
Mike

1

อาจไม่ใช่วิธีที่ดีที่สุด แต่สคริปต์นี้ใช้งานได้:

#!/bin/sh

while true
do
    DIRS=`find . -xdev -type d -exec find {}  -maxdepth 0 -empty  \;`
    if [ -z "$DIRS" ]; then
        exit 0
    else
        echo $DIRS | xargs rmdir
    fi
done

(ส่วนหนึ่งขึ้นอยู่กับคำตอบในรายการโฟลเดอร์ว่างทั้งหมด )


1
เพียงแค่เกิดขึ้นกับผมว่าเรื่องนี้จะเข้าสู่วง จำกัด ถ้าคุณไม่ได้รับสิทธิ์ในการลบใด ๆ ของไดเรกทอรีว่างดังนั้นโปรดใช้คำตอบที่ได้รับการยอมรับแทน :)
AndrewR

0
for i in `find -type d -empty`; do rmdir $i; done

ปิด แต่ไม่มีซิการ์ คุณหายไปในกรณีที่การลบไดเรกทอรีทำให้แม่ของมันกลายเป็นที่ว่างเปล่า
Simon Richter

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