รับขนาดด้วยไฟล์ du เท่านั้น


49

ฉันจะรับขนาดของไฟล์ทั้งหมดและไฟล์ทั้งหมดในไดเรกทอรีย่อยโดยใช้คำสั่ง du ได้อย่างไร

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

find . -type f | du -a

แต่นี่จะพิมพ์ขนาดโฟลเดอร์เช่นกัน ฉันจะรับรายการขนาดไฟล์และไฟล์ทั้งหมดในไดเรกทอรีย่อยได้อย่างไร ฉันยังพยายามexec flagแต่ผมไม่แน่ใจว่าจะเข้ามาในท่อส่งออกคำสั่งอื่นหลังจากที่มันรันผลของการเข้าสู่finddu

ระบบปฏิบัติการคือ AIX 6.1 ที่มี ksh เชลล์

คำตอบ:


56

ฉันมักจะใช้-execยูทิลิตี้ แบบนี้:

find . -type f -exec du -a {} +

ฉันลองทั้ง bash และ ksh กับ GNU พบ ฉันไม่เคยลองใช้ AIX แต่ฉันแน่ใจว่าเวอร์ชันการค้นหาของคุณมี-execไวยากรณ์บางส่วน

ตัวอย่างต่อไปนี้เรียงลำดับรายการมากที่สุดก่อน:

find . -type f -exec du -a {} + | sort -n -r | less

3
ฉันจะไปกับคำตอบนี้ถ้าคุณไม่สามารถเข้าถึงfind -print0หรือคุณสมบัติ GNU อื่น ๆ หากมีให้แทนที่\;ด้วย\+จะส่งผลให้มีการร้องขอน้อยลงduและทำให้มีประสิทธิภาพดีขึ้น
jw013

ขอขอบคุณมันใช้งานได้ดีโดยเฉพาะอย่างยิ่งเนื่องจาก du มีขนาดธงในหน่วยที่แตกต่างกัน
Shardul Upadhyay

ฉันไม่พบข้อมูลเกี่ยวกับ+ตัวเลือก นั่นคือตัวเลือกสำหรับduหรือเพื่อfind? และทำไมมันส่งผลให้สายน้อยลง?
Amelio Vazquez-Reina

1
findมันเป็นตัวเลือกมาตรฐาน มันระบุถึงexecคำสั่ง (ในกรณีของเราdu) เพียงครั้งเดียวโดยมีผลลัพธ์ทั้งหมดของการfindกำหนดเป็นอาร์กิวเมนต์ที่ต่อเนื่องกับคำสั่ง
rahmu

wtf ทำไมไม่มีคำสั่งเช่นdu -f --threshold=1G
Alexander Mills

16

หากคุณมีโปรแกรมอรรถประโยชน์ GNU ลอง

find . -type f -print0 | du --files0-from=-

คำสั่งล้มเหลวที่ระบุว่า print0 ไม่ใช่คำสั่งที่ถูกต้องและเครื่องหมายลบสุดท้ายไม่ใช่การตั้งค่าสถานะที่รู้จัก ฉันไม่คิดว่าวิธีการนี้จะใช้งานได้เพราะman duไม่มีรายการfilesหรือfromตั้งค่าสถานะ
Shardul Upadhyay

คุณควรเพิ่มระบบปฏิบัติการของคุณเป็นแท็กคำถาม ฉันคิดว่าคุณมี GNU แต่ลืมพูดถึงสิ่งนั้น
jw013

1
มี upvote กับฉัน! โซลูชันเฉพาะของคุณทำงานร่วมกับdu -chการรับไฟล์ที่ตรงกันทั้งหมด:find . -name 'blah blah.*' -print0 | du --files0-from=- -ch
Michael Goldshteyn

9

ฉันมักจะใช้:

find . -type f -print0 | xargs -r0 du -a

Xargs มักจะเรียกคำสั่งแม้ว่าจะไม่มีการส่งผ่านอาร์กิวเมนต์; xargs du </dev/nullจะยังคงถูกเรียกxargs -r du </dev/nullจะไม่เรียกดู -0อาร์กิวเมนต์มองหาสตริงโมฆะยกเลิกแทนการขึ้นบรรทัดใหม่ยกเลิก

จากนั้นฉันก็มักจะบวก| awk '{sum+=$1} END {print sum}'ท้ายเพื่อให้ได้ผลรวม


2
then I usually addเป็นมูลค่าของทอง :-)
Radek

2

นี่คือรุ่นที่มีชื่อพารามิเตอร์แบบยาวและการจัดเรียงแบบมนุษย์

find . -type f -exec du --human {} + | sort --human --reverse | head

ผมยังเห็นความจำเป็นในการไม่มีที่จะถูกส่งผ่านไป-a/--alldu


-2

ไฟล์เฉพาะใน dir ปัจจุบัน

du -ch files*

สั้นกว่าและใช้ได้กับฉัน

du -sh .

สำหรับ dir ปัจจุบันและไฟล์ทั้งหมดในย่อย

du (GNU coreutils) 8.30


1
(1) คุณหมายถึงdu -ch files*อะไร สมมติว่าไดเรกทอรีปัจจุบันมีant, apple, banana, bat, cat, corn, dateและdogที่ชื่อสัตว์ที่มีไดเรกทอรีย่อยและ / ชื่อผักผลไม้ที่มีไฟล์ - สิ่งที่คำสั่งที่คุณจะใช้ในการรับไฟล์เพียง? หรือนั่นไม่ใช่สิ่งที่คุณหมายถึง? (2)  du -sh .จะรายงานเพียงจำนวนรวมของทุกสิ่งในและภายใต้ไดเรกทอรีปัจจุบันและไม่ใช่ไฟล์ทั้งหมด นี่เป็นสิ่งที่ตรงกันข้ามกับคำถามที่ถาม
G-Man พูดว่า 'Reinstate Monica'
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.