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


785

มีคำสั่งง่าย ๆ ในการแสดงขนาดรวมทั้งหมด (การใช้งานดิสก์) ของไฟล์ทั้งหมดในไดเรกทอรี (โฟลเดอร์) หรือไม่?

ฉันลองสิ่งเหล่านี้แล้วและพวกเขาไม่ทำสิ่งที่ฉันต้องการ:

  • ls -lซึ่งจะแสดงเฉพาะขนาดของไฟล์แต่ละไฟล์ในไดเรกทอรีหรือ
  • df -hซึ่งแสดงพื้นที่ว่างและที่ใช้แล้วบนดิสก์ของฉันเท่านั้น



การเตือนที่เป็นมิตรว่าอาจทำให้รู้สึกเป็นศูนย์ในระบบไฟล์ CoW เช่น BTRFS
Val

คำตอบ:


1265

คำสั่งdu"สรุปการใช้งานดิสก์ของแต่ละไฟล์ไฟล์ซ้ำสำหรับไดเรกทอรี" เช่น

du -hs /path/to/directory
  • -hคือการได้รับตัวเลข "มนุษย์สามารถอ่านได้" เช่นรับ140Mแทน143260(ขนาดเป็น KBytes)
  • -sสำหรับสรุป (มิฉะนั้นคุณจะได้รับไม่เพียง แต่ขนาดของโฟลเดอร์ แต่ยังรวมถึงทุกอย่างในโฟลเดอร์แยกต่างหาก)

ในขณะที่คุณใช้-hคุณสามารถเรียงลำดับค่าที่มนุษย์อ่านได้โดยใช้

du -h | sort -h

การ-hตั้งค่าสถานะsortจะพิจารณาค่าขนาด "มนุษย์อ่านได้"


หากต้องการหลีกเลี่ยงการแสดงรายการไฟล์และไดเรกทอรีทั้งหมดซ้ำคุณสามารถระบุ--max-depthพารามิเตอร์เพื่อ จำกัด จำนวนรายการที่จะแสดง โดยทั่วไปแล้ว--max-depth=1

du -h --max-depth=1 /path/to/directory

9
เคารพที่จะไปไมล์พิเศษ :)
myusuf3

93
ฉันใช้du -shหรือ DOOSH เป็นวิธีการจดจำ (หมายเหตุ: คำสั่งเหมือนกันเพียงแค่การจัดระเบียบของ commandline flag สำหรับหน่วยความจำ)
Marco Ceppi

3
มีตัวเลือกที่มีประโยชน์สำหรับ du ที่เรียกว่า --apparent-size มันสามารถใช้ในการค้นหาขนาดที่แท้จริงของไฟล์หรือไดเรกทอรี (ตรงข้ามกับรอยเท้าบนดิสก์) เช่นไฟล์ข้อความที่มีเพียง 4 ตัวอักษรจะครอบครองประมาณ 6 ไบต์ แต่จะยังคงปรากฏขึ้นเป็น ~ 4K ใน เอาต์พุต du -sh ปกติ อย่างไรก็ตามถ้าคุณผ่านตัวเลือก --apparent-size ผลลัพธ์จะเป็น 6. man du พูดว่า: - ขนาดที่ชัดเจนของการพิมพ์ขนาดปรากฏขึ้นมากกว่าการใช้ดิสก์ แม้ว่าขนาดที่เห็นได้ชัดมักจะเล็กกว่า แต่มันอาจใหญ่กว่าเนื่องจากรูในไฟล์ ('เบาบาง') การแตก
Hopping Bunny

4
ใช้งานได้กับ OS X ด้วย! ขอบคุณฉันกำลังมองหาวิธีการล้างไฟล์ทั้งบนเครื่องของฉันและเซิร์ฟเวอร์ของฉัน แต่วิธีอัตโนมัติดูเหมือนจะไม่ทำงาน ดังนั้นฉันจึงวิ่งdu -hs *เข้าไปในไดเรกทอรีที่ใหญ่ที่สุดและพบว่าไฟล์ใดมีขนาดใหญ่มาก ... นี่เป็นวิธีที่ดีและส่วนที่ดีที่สุดคือคุณไม่ต้องติดตั้งอะไร! สมควรได้รับการโหวตของฉันอย่างแน่นอน
Dev

@BandaMuhammadAlHelal ผมคิดว่ามีเหตุผลสองประการคือการปัดเศษ ( duมีการปัดเศษค่อนข้างแปลกไม่แสดงทศนิยมถ้าค่ามีมากกว่าหนึ่งหลักในหน่วยเลือก) และคลาสสิก1024 เทียบกับ 1000 คำนำหน้าปัญหา duมีตัวเลือก-B(หรือ--block-size) เพื่อเปลี่ยนหน่วยที่แสดงค่าหรือคุณสามารถใช้-bแทน-hการรับค่า "ดิบ" เป็นไบต์
Marcel Stimberg

164

เมื่อเร็ว ๆ นี้ฉันพบเครื่องมือเชิงโต้ตอบที่ยอดเยี่ยมและใช้งานง่ายซึ่งให้ภาพรวมเกี่ยวกับขนาดไดเรกทอรีอย่างรวดเร็ว ค้นหาเครื่องมือชนิดนั้นมานานหลายปี

  • ดูรายละเอียดอย่างรวดเร็วผ่านลำดับชั้นไฟล์
  • คุณสามารถลบเช่นไฟล์ชั่วคราวขนาดใหญ่จากภายในเครื่องมือ
  • เร็วสุด ๆ

คิดว่าเป็นBaobabสำหรับบรรทัดคำสั่ง:

apt-get install ncdu

11
มันยอดเยี่ยมมาก! เช่น DaisyDisk สำหรับ OSX
subZero

3
ncduมันยอดเยี่ยม! ncdu /หลังจากติดตั้งแล้วเพียงทำเช่นนี้ คุณจะพบไฟล์ที่ใหญ่ที่สุดในระบบได้อย่างรวดเร็ว กดhในขณะที่อยู่ในส่วนต่อประสานของคอนโซล ncdu มันมีทางลัดที่มีประโยชน์มาก
vlad-ardelean

นี่คือสิ่งที่ฉันต้องการ: เรียบง่ายและมีประสิทธิภาพมาก รักบริสุทธิ์.
3790897

52

สิ่งนี้จะพบขนาดซ้ำ ๆ และวางไว้ข้างชื่อโฟลเดอร์แต่ละชื่อพร้อมกับขนาดรวมที่ด้านล่างทั้งหมดในรูปแบบมนุษย์

du -hsc *


10

tree เป็นอีกคำสั่งที่มีประโยชน์สำหรับงานนี้:

เพียงติดตั้งผ่านทางsudo apt-get install treeและพิมพ์ต่อไปนี้:

tree --du -h /path/to/directory
...
...

33.7M used in 0 directories, 25 files

จากต้นไม้มนุษย์ :

-h    Print  the size of each file but in a more human readable way, e.g. appending a size letter for kilo‐
      bytes (K), megabytes (M), gigabytes (G), terabytes (T), petabytes (P) and exabytes (E).

--du  For each directory report its size as the accumulation of sizes of all its files and  sub-directories
      (and their files, and so on). The total amount of used space is also given in the final report (like
      the 'du -c' command.)

9

ด้านล่างคือสิ่งที่ฉันใช้เพื่อพิมพ์ผลรวมโฟลเดอร์และขนาดไฟล์:

$ du -sch /home/vivek/* | sort -rh

รายละเอียด

 ------------------------------------------------------------
   -c, --total
          produce a grand total
   -h, --human-readable
          print sizes in human readable format (e.g., 1K 234M 2G)
   -s, --summarize
          display only a total for each argument
 -------------------------------------------------------------
   -h, --human-numeric-sort
          compare human readable numbers (e.g., 2K 1G)
   -r, --reverse
          reverse the result of comparisons

เอาท์พุต

 70M    total
 69M    /home/vivek/Downloads/gatling-charts-highcharts-bundle-2.2.2/lib
992K    /home/vivek/Downloads/gatling-charts-highcharts-bundle-2.2.2/results
292K    /home/vivek/Downloads/gatling-charts-highcharts-bundle-2.2.2/target
 52K    /home/vivek/Downloads/gatling-charts-highcharts-bundle-2.2.2/user-files

4

คำตอบทำให้ชัดเจนว่าduเป็นเครื่องมือในการค้นหาขนาดทั้งหมดของไดเรกทอรี อย่างไรก็ตามมีสองปัจจัยที่ควรพิจารณา:

  • บางครั้งduเอาต์พุตอาจทำให้เข้าใจผิดเนื่องจากรายงานพื้นที่ที่จัดสรรโดยระบบไฟล์ซึ่งอาจแตกต่างจากผลรวมของขนาดของแต่ละไฟล์ โดยทั่วไประบบไฟล์จะจัดสรร 4096 ไบต์สำหรับไฟล์แม้ว่าคุณจะเก็บไว้เพียงตัวเดียว!

  • ความแตกต่างของเอาต์พุตเนื่องจากกำลัง 2 และกำลังไฟฟ้า 10 หน่วย -hสลับไปduแบ่งจำนวนไบต์โดย 2 ^ 10 (1024), 2 ^ 20 (1048576) ฯลฯ เพื่อให้การส่งออกการอ่านของมนุษย์ หลายคนอาจเคยเห็นพลังมากกว่า 10 (เช่น 1K = 1,000, 1M = 1000000) และรู้สึกประหลาดใจกับผลลัพธ์

ในการค้นหาผลรวมขนาดทั้งหมดของไฟล์ทั้งหมดในไดเรกทอรีให้ทำ:

find <dir> -ls | awk '{sum += $7} END {print sum}'

ตัวอย่าง:

$ du -s -B 1
255729664

$ find .  -ls | awk '{sum += $7} END {print sum}'
249008169

ค้นหา-LS-awk จะกลับมาเป็นค่าที่ไม่ถูกต้องสำหรับโฟลเดอร์ที่มีขนาดใหญ่เป็นอันดับ 1 สำหรับ awk ที่ใหม่กว่าคุณสามารถเพิ่ม--bignumหรือ-M; ถ้าไม่ได้เป็นตัวเลือกที่ใช้find . -ls | tr -s ' '|cut -d' ' -f 7| paste -sd+ |bc # 2
goozez

หากมีการใช้กำลัง 2 เป็นปัญหามี--siตัวเลือก: "like -h แต่ใช้พลัง 1,000 ไม่ใช่ 1024"
muru

1

เฉพาะขนาดไดเรกทอรีในรูปแบบที่อ่านได้ให้ใช้ด้านล่าง:

du -hs directoryname

นี่อาจไม่ได้อยู่ในส่วนที่ถูกต้อง แต่จากบรรทัดคำสั่งคุณสามารถลอง:

ls -sh filename

-sคือขนาดและ-hเป็นคนอ่าน

ใช้-lเพื่อแสดงในlsรายการเช่นด้านล่าง:

ls -shl

0

du /foldernameเป็นคำสั่งมาตรฐานที่จะทราบขนาดของโฟลเดอร์ เป็นวิธีปฏิบัติที่ดีที่สุดในการค้นหาตัวเลือกโดยอ่าน man page:

man du

คุณควรอ่าน man page (มีออนไลน์ ) ก่อนที่คุณจะใช้คำสั่ง



0

หากไดเรกทอรีที่คุณต้องการมีหลายไดเรกทอรีย่อยให้ทำดังนี้:

$ cd ~/your/target/directory
$ du -csh 

-c,
- ยอดรวมผลิตทั้งหมด-s, - แสดงผลรวมเฉพาะสำหรับแต่ละอาร์กิวเมนต์
-h, - ขนาดการพิมพ์ที่มนุษย์สามารถอ่านได้ในรูปแบบที่มนุษย์อ่านได้ (เช่น 1K 234M 2G)

ซึ่งจะสร้างการใช้หน่วยความจำทั้งหมดโดยรวมโดยไฟล์ / โฟลเดอร์ทั้งหมดในไดเรกทอรีปัจจุบัน


-1

ที่ดีที่สุดที่ฉันคิดคือต่อไปนี้:

du -h directory_name | tail -n1

สิ่งนี้จะแสดงเฉพาะขนาดของไดเรกทอรีที่คุณสนใจและจะไม่พิมพ์ขนาดของไดเรกทอรีและไฟล์ภายในไดเรกทอรีนั้น

ฉันควรเพิ่มว่าถ้าขนาดของโฟลเดอร์ใหญ่แล้ว du ใช้เวลานานกว่า คุณต้องอดทนให้คำสั่งนี้ทำงาน เช่นเดียวกับคำสั่ง unix อื่น ๆ คุณสามารถหาเวลาทั้งหมดสำหรับกระบวนการนี้โดยใช้timeก่อนคำสั่งนี้:

time du -h directory_name | tail -n1

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