รับขนาดโดยประมาณของไดเรกทอรี (รวมทั้งไฟล์และไดเรกทอรีย่อยซ้ำ ๆ )


10

มีวิธีที่จะได้ขนาดที่ถูกต้องอย่างรวดเร็วสำหรับไดเรกทอรี (รวมถึงไดเรกทอรีย่อยทั้งหมดซ้ำ)? ฉันไม่ต้องการขนาดของส่วนย่อยฉันแค่หมายความว่าควรรวมไว้ในรายงานซ้ำขนาดรวม

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

โซลูชั่นที่ใช้duดูเหมือนจะใช้เวลานานเมื่อได้รับไดเรกทอรีประกอบด้วยหลายพันย่อย dirs


การใช้duเป็นวิธีเดียวที่ฉันรู้ ปัญหาคือข้อมูลจะถูกกระจายไปทั่วลำดับชั้นดังนั้นจึงจำเป็นต้องมีเครื่องมือในการนับจำนวน
slm

คำตอบ:


15

ฉันพบว่ามันมีประโยชน์มาก

du -sm Directory

หรือเพื่อรับรายละเอียดของไดเรกทอรีภายใน

du -sm Directory/*

แล้วก็มีการเรียงลำดับถ้ามันมีหลายตำบล

du -sm Directory/* | sort -n 

เหตุผลที่ฉันใช้ตัวเลือก -m คือเพื่อให้แน่ใจว่าฉันได้รับผลลัพธ์เมกะไบต์ ฉันพบว่ามันง่ายกว่าที่ฉันจะเปรียบเทียบภาพ (เมื่อฉันไม่ได้รับการผสมผสานของหน่วยเช่นเปรียบเทียบ 999 KB และ 1MB เทียบกับ 999000MB และ 1000000MB) ประโยชน์เพิ่มเติมคือคุณสามารถส่งผ่านการเรียงลำดับ

ใส่มันทั้งหมดในพื้นหลังและเปลี่ยนเส้นทางมันจะต้องใช้เวลาที่เคยใช้วิธีใดมันเป็นทราเวิร์ของไฟล์จำนวนมากซึ่งจะใช้เวลา

du -sm Directory/* | sort -nr > ~/cacheDu.log &

สังเกตการเรียงกลับกันเพื่อให้สิ่งที่มีขนาดใหญ่อยู่ที่จุดเริ่มต้น เพิ่มลงใน cron รันทุก ๆ n นาที

จากนั้นเมื่อใช้นามแฝงคุณจะได้รับการใช้งานไดเรกทอรีที่ทันสมัยอยู่เสมอ

export alias ducache='head -n 15 ~/cacheDu.log'

@X Tian ดูความคิดเห็นของฉันเกี่ยวกับคำตอบของ glenn jackman
Marcus Junius Brutus

ยอมรับว่าเป็นเหตุผลที่ฉันใช้ -m และ sort
X Tian

3
อย่าลืมshopt -s dotglobมิฉะนั้นdu -sm Directory/*จะไม่นับไฟล์ / ไดเรกทอรีที่ซ่อนอยู่
Dmitry Grigoryev

@XTian ขออภัย แต่ฉันไม่สามารถให้คำสั่งบางอย่างได้โปรดช่วยด้วย
Maveňツ

ฉันได้รับจากที่นี่
Maveňツ

5
du -sh "$dir"

จะให้ข้อมูลสรุปขนาดทั้งหมดในเอาต์พุตที่จัดรูปแบบ "human"


เนื่องจากคุณกำลังมองหาทางเลือกduฉันพยายามfindแต่มันเหมือนกันทุกประการ:

$ find . -printf "%s\n" | { 
    sum=0
    while read size; do ((sum+=size)); done
    echo $sum
}
122865202884
$ du -sb .
122865202884    .

ขอบคุณฉันทราบดี แต่duใช้เวลานานเกินไปเพราะจะให้ผลลัพธ์ที่แม่นยำ ฉันหวังว่าจะมีเครื่องมือ / คำสั่งที่ให้คำตอบคร่าวๆสกปรกอย่างรวดเร็ว
Marcus Junius Brutus

มีdfแต่ที่ทำงานบนระบบไฟล์ทั้งหมด
เกล็นแจ็คแมน

1

คุณอาจไม่ชอบคำตอบของฉัน แต่ฉันคิดว่าวิธีที่ดีที่สุดในการทำสิ่งที่คุณต้องการคือเรียกใช้ "du -s" ในพื้นหลังเป็นประจำโดยใช้ cron และเก็บผลลัพธ์ไว้ในไฟล์ จากนั้นเมื่อคุณต้องการค่าโดยประมาณให้ใช้ค่าจากไฟล์ คุณต้องตัดสินใจว่าจะใช้ du บ่อยแค่ไหน ฉันไม่เห็นวิธีรับค่าที่เร็วขึ้น คำสั่ง du มีประสิทธิภาพสำหรับสิ่งที่ทำ

วิธีเดียวที่คุณสามารถทำได้อย่างรวดเร็วคือการสร้างระบบไฟล์สำหรับไดเรกทอรีจากนั้น df จะให้คำตอบที่คุณต้องการอย่างรวดเร็ว

หากเร็วกว่าที่จะรู้ทุกอย่างในระบบไฟล์ยกเว้นไดเรกทอรีของคุณคุณสามารถเรียกใช้ df สำหรับระบบไฟล์ได้และเป็นทุกอย่างที่ไม่ใช่ไดเรกทอรีและการลบของคุณ


0

ไม่ตรงกับความต้องการของคุณ (ไม่ใช่การพิมพ์แบบบรรทัดเดียว) แต่วิธีนี้ง่ายกว่าโซลูชันอื่น ๆ :

du -a -h | sort -hr | head -2

คำสั่งนี้จะให้ขนาดของไดเรกทอรีและไดเรกทอรีย่อยและขนาดของไฟล์ที่ใหญ่ที่สุดหรือไดเรกทอรีย่อยในไดเรกทอรีปัจจุบัน

PS: head -2เป็นในกรณีที่ไดเรกทอรีย่อยใช้สถานที่ของไดเรกทอรีปัจจุบันทั้งหมดและฟังก่อนปัจจุบัน

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