คำถามนี้มีคำตอบอยู่ที่นี่แล้ว:
ฉันใช้คำสั่งอะไรเพื่อค้นหาขนาดของไฟล์ทั้งหมด (เรียกซ้ำ) ในไดเรกทอรี Linux หรือ Mac OS X
คำถามนี้มีคำตอบอยู่ที่นี่แล้ว:
ฉันใช้คำสั่งอะไรเพื่อค้นหาขนาดของไฟล์ทั้งหมด (เรียกซ้ำ) ในไดเรกทอรี Linux หรือ Mac OS X
คำตอบ:
เวอร์ชัน BSD ที่du
ใช้ใน OS X รายงานขนาดที่มีบล็อก 512- ไบต์ - ขนาดจะถูกปัดเศษขึ้นเป็นค่า 512- ไบต์ต่อไป สิ่งนี้บอกพื้นที่บนดิสก์ซึ่งมีขนาดใหญ่กว่าปริมาณข้อมูล หากคุณมีไฟล์ขนาดเล็กจำนวนมากความแตกต่างอาจมีขนาดใหญ่
นี่คือตัวอย่าง
du
นี่คือค่ากับปกติ มันอยู่ในบล็อกขนาด 512- ไบต์:
$ du -s
248 .
-h
ผลธงในจำนวนอ่านได้มากขึ้นเป็นกิโลไบต์ อย่างที่คาดไว้มันเป็นจำนวนครึ่งหนึ่งของบล็อก 512- ไบต์:
$ du -hs
124K .
ในที่สุดคุณสามารถใช้find
และawk
เพื่อให้ผลรวมของไบต์ที่เกิดขึ้นจริงในไฟล์ นี่เป็นชนิดที่ช้า แต่ใช้งานได้:
$ find . -type f -exec ls -l {} \; | awk '{sum += $5} END {print sum}'
60527
ค่านี้ตรงกับจำนวนที่รายงานโดยหน้าต่างรับข้อมูลของ Finder's (ไม่มีงาแปลกหรือ xattrs ในชุดของแฟ้มนี้.) du
มันเป็นอย่างมีนัยสำคัญน้อยกว่าค่าที่รายงานโดย
นี่คือวิธีการทำงาน: รับรายการไฟล์ทั้งหมดและส่งต่อไปยังls -l
; จากนั้นawk
จะใช้ในการนับไบต์ -type f
ธงเพื่อให้มีเฉพาะไฟล์ (และไม่ไดเรกทอรี) ls
ได้ส่งไปยัง หากไม่มีการตั้งค่าสถานะนั้นมันจะส่งชื่อไดเรกทอรีไปยังls
และแต่ละไฟล์จะมีรายชื่อสองครั้ง: หนึ่งครั้งสำหรับแต่ละไฟล์และอีกครั้งหนึ่งเป็นรายการในไดเรกทอรี
เวอร์ชันของ GNU du
สามารถให้ค่าเป็นไบต์จริงแทนที่จะเป็นบล็อก โชคไม่ดีที่เวอร์ชั่น BSD du
นั้นไม่ยืดหยุ่นเท่าที่ควร
du
จาก GNU coreutils ด้วย-b
ตัวเลือกที่ฉันได้รับผลลัพธ์ที่แตกต่างกว่ากับfind
ท่อของคุณ สำหรับไดเรกทอรี 36 GB ฉันได้รับความแตกต่าง 82 KB
แสดงขนาดของไฟล์เดียว
du -h path_to_a_file
แสดงขนาดของเนื้อหาของไดเรกทอรีแต่ละไดเรกทอรีย่อยและแต่ละไฟล์:
du -h path_to_a_directory
แสดงขนาดของเนื้อหาของไดเรกทอรี:
du -sh path_to_a_directory
du -sch
ถ้าคุณต้องการสิ่งที่อ่านง่ายขึ้น
du - บอกการใช้งานดิสก์ไม่ได้ขนาดไฟล์
find . -type f -print0 | xargs -0 stat -f%z | awk '{b+=$1} END {print b}'
เหนือรหัสเทอร์มินัล (im on osx 10.6) ให้ผลลัพธ์ที่ดีที่สุดแก่ฉันและเร็วกว่า "find ... -exec"
มาตรฐานที่รวดเร็ว
time find . -type f -print0 | xargs -0 stat -f'%z' | awk '{b+=$1} END {print b}'
4744010970
real 0m0.086s
user 0m0.029s
sys 0m0.073s
time find . -type f -exec ls -l {} \; | awk '{sum += $5} END {print sum}'
4744010970
real 0m18.515s
user 0m2.929s
sys 0m9.339s
find . -type f -print0 | xargs -0 stat -c%s | awk '{b+=$1} END {print b}'
คุณสามารถใช้du -ah .
ขนาดที่แสดงไฟล์และไดเรกทอรีทั้งหมดซ้ำ
สิ่งนี้สามารถใช้ร่วมกับsort
ดังนั้นคุณจะเห็นไดเรกทอรีที่ใหญ่ที่สุด 20 อันดับแรกในโฟลเดอร์ปัจจุบัน:
du -ah . | sort -rh | head -20
หมายเหตุ: ตัวเลือก-h
สำหรับการsort
ไม่สามารถใช้ได้ใน OSX / BSD เพื่อให้คุณได้ในการติดตั้งsort
จากcoreutils
(เช่นผ่านทางbrew
) และใช้เส้นทางถังไปPATH
เช่น
export PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH" # Add a "gnubin" for coreutils.
มิฉะนั้นใช้:
du -a . | sort -rn | head -20
brew install coreutils
มิฉะนั้นใช้คำสั่ง BSD -h
การจัดเรียงที่ปลายโดยไม่ต้อง
ฉันรวมแอปทั้งหมดของคุณและรวมเข้ากับเอาต์พุตที่มนุษย์อ่านได้ผลลัพธ์คือ:
#!/bin/sh
find $1 -type f -print0 | xargs -0 stat -f'%z' | awk '{b+=$1} END {print b}' | awk '{ sum=$1 ; hum[1024**3]="Gb";hum[1024**2]="Mb";hum[1024]="Kb"; for (x=1024**3; x>=1024; x/=1024){ if (sum>=x) { printf "%.2f %s\n",sum/x,hum[x];break } }}'
เชื่อมโยงไปยังส่วนสำคัญ: https://gist.github.com/mlegenhausen/9365461
-k
ตัวเลือกเพื่อใช้ขนาดบล็อก 1K-byte