คำสั่ง du ไม่แยกวิเคราะห์ไดเร็กทอรีที่ซ่อนอยู่


25

ฉันต้องการประมาณจำนวนพื้นที่ดิสก์ที่ใช้โดยไดเรกทอรีโดยใช้คำสั่งต่อไปนี้

du -sh dir_name

ซึ่งไม่ได้คำนวณไดเรกทอรีที่ซ่อนอยู่ ในหน้าคนของ du ไม่มีข้อมูลเกี่ยวกับมัน วิธีคำนวณจำนวนพื้นที่ดิสก์ที่ใช้โดยไดเรกทอรีรวมถึงไฟล์ที่ซ่อนอยู่

คำตอบ:


13

ที่จริงแล้วนี่คือหลักฐาน:

mkdir .test
echo "hi" > .test/appo
du -a
4       ./.test/appo
8       ./.test
12      .

-aตัวเลือกที่จะใช้ในการแสดงอย่างชัดเจนว่าไฟล์ถูกนับ

คุณกำลังใช้du *?


3
+1 สำหรับ... you maybe using "du *" ?
sehe

2
ฉันไม่ได้ใช้ "du *" ฉันลืมพูดถึงคำถามที่ฉันต้องการสรุปโดยรวม ดังนั้นหากฉันใช้ทั้ง -a และ -s ใน du-as ฉันได้รับข้อความแสดงข้อผิดพลาดว่า "du: ไม่สามารถสรุปและแสดงรายการทั้งหมดได้" นี่คือปัญหาหนึ่ง อีกอย่างคือผมยังดู du -ai ได้แค่ดูไฟล์ระดับแรกเท่านั้น คือไม่สามารถดูไฟล์ในไดเรกทอรีที่ซ่อนอยู่
Talespin_Kit

1
ฉันเพิ่งเพิ่ม - เพื่อแสดงไฟล์ทั้งหมดที่ถูกนับเพียงแค่ไม่เพิ่มแฟล็กนั้นมันจะมีผลกับจอแสดงผลไม่ใช่ผลรวมเท่านั้น ฉันแสดงให้คุณเห็นตัวอย่างเคาน์เตอร์ที่แทนที่จะนับไดเรกทอรีที่ซ่อนอยู่
stivlo

1
ตอนนี้ฉันพบปัญหา ปัญหาคือไดเรกทอรีที่ซ่อนอยู่เป็นลิงก์สัญลักษณ์ดังนั้นฉันต้องใช้ "du -Lsh dir_name" ขอบคุณ
Talespin_Kit

1
อ่าฉันดีใจดีใจที่คุณเจอมัน
stivlo

53

คำสั่งนี้จะแสดงขนาดโดยสรุปของไดเรกทอรีที่ซ่อนอยู่

du -hs .[^.]*


1
นี่คือสิ่งที่ฉันกำลังมองหาขอบคุณ :)
Nikana Reklawyks

นี่เป็นทางออกที่ถูกต้อง
3pns

มันจะยอดเยี่ยมถ้าคุณสามารถอธิบายความมหัศจรรย์เล็กน้อยได้ มันจะช่วยในการสร้างคำตอบซึ่งรวมถึงไฟล์และไดเรกทอรีทั้งที่ซ่อนอยู่และไม่ได้ซ่อนอยู่
kumetix

13

คำสั่งที่ถูกต้องคือ: du -hs $(ls -A)

$ du -hs $(ls -A)
0   test
0   .test

du -hs .* *ตามที่กล่าวไว้ในคำตอบอื่นไม่ถูกต้องหากคุณต้องการแสดงรายการไฟล์และไดเรกทอรีย่อยทั้งหมด (รวมถึงไฟล์ที่ซ่อนอยู่)

ตัวอย่าง:

$ touch test
$ touch .test
$ echo *
test
$ echo .* *
. .. .test test
$ du -hs .* *
4,0K    .
1,8G    ..

ทำไมถึงมีduพฤติกรรมเช่นนี้? เพราะคุณใช้-sสรุปผลและไฟล์และไดเรกทอรีย่อยทั้งหมดเป็นรายการย่อย.ดังนั้นจึงdu -hsไม่แสดงรายการ!


11

FYI สำหรับการประมาณขนาดที่ครอบครองโดยไดเรกทอรีต่าง ๆ มันจะดีกว่าถ้าใช้ncdu

คุณสามารถนำทางใน ncurses GUI ระหว่างไดเรกทอรีต่าง ๆ และมันจะแสดงขนาดของแต่ละไดเรกทอรี หากฉันใช้ du ฉันจะต้องดำเนินการคำสั่ง du สำหรับแต่ละไดเรกทอรีที่ฉันต้องการตรวจสอบซึ่งอาจยุ่งยาก คุณสามารถเรียงลำดับไดเรกทอรีตามขนาดที่ครอบครองเช่นกันใน ncurses GUI


1
โปรดแก้ไขคำตอบของคุณเพื่อระบุสาเหตุที่คุณเชื่อว่า ncdu เป็น "ดีกว่า" หน้าเชื่อมโยงไม่ได้พูดอะไรเกี่ยวกับเรื่องอื่น ๆ มากกว่าว่ามันเป็นรุ่น ncurses duตาม นอกเหนือจากวิธีการแสดงที่ชื่นชอบแล้วไม่มีข้อบ่งชี้ที่ชัดเจนถึงความแตกต่างในการใช้งานใด ๆ
Dave Sherohman

ฉันคิดว่าความสามารถในการปรับการสืบค้นของคุณเป็นประโยชน์อย่างมาก ฉันสามารถรัน ncdu บน ~, เรียนรู้ว่าไดเรกทอรีใดกำลังใช้พื้นที่มากที่สุดแล้วดำดิ่งลงไปในไดเรกทอรีเหล่านั้นโดยตรง นอกจากนี้ยังให้การdเชื่อมโยงเพื่อลบไดเรกทอรีเพื่อให้คุณสามารถล้างข้อมูลได้โดยตรงจากอินเทอร์เฟซ
user88974

5

มันทำและมันไม่ ตัวอย่าง:

ในโฮมไดเรกทอรี: (มีผู้ใช้เพียงคนเดียวเท่านั้น)

du -sh /home/*
2.6G    /home/user

ในสารบบผู้ใช้: (ความแตกต่างอย่างมากระหว่างจำนวนเงิน)

du -sh *
61M     bin
2.0M    dump-20130124104823.tar.gz
651M    public_html
472K    twitter-2.0.0.gem
11M     wkhtmltopdf-0.11.0_rc1-static-amd64.tar.bz2

และเหตุผลคือ:

du -sh /home/user/.rvm/
1.9G    /home/user/.rvm/

du จะคำนวณไดเรกทอรีที่ซ่อนอยู่ในขณะที่ลดลงในไดเรกทอรีย่อย แต่ในไดเรกทอรีปัจจุบัน * เพียงไม่ตรงกับรูปแบบ. directory_name เพื่อให้องค์ประกอบที่ซ่อนไดเรกทอรีปัจจุบันจะถูกละเว้น

ฉันใช้เวลาพอสมควรในการหาคำตอบและในขณะที่แชดี้abแนะนำว่ามันจะชัดเจนถ้าฉันใช้ ncdu


1

คำสั่งที่ถูกต้องคือ: du -hs .* *


ข้อมูลเพิ่มเติมบางอย่างจะทำให้นี่เป็นคำตอบที่ยอมรับได้
Ramhound

1

find -maxdepth 1 -exec du -sh "{}" \; | sort -h

สิ่งนี้จะช่วยให้คุณ:

  • ขนาดของไฟล์ / ไดเรกทอรีที่ซ่อนอยู่
  • ขนาดของไฟล์ / ไดเรกทอรีที่ไม่ได้ซ่อนไว้
  • ขนาดรวมทั้งหมดของไดเรกทอรีปัจจุบัน

นอกจากนี้ยังเรียงลำดับผลลัพธ์เพื่อให้ง่ายต่อการดูว่าอะไรที่ใหญ่ที่สุด ฉันทำสิ่งนี้เป็นชื่อแทนใน~/.bash_aliasesไฟล์ของฉันด้วย

alias big='find -maxdepth 1 -exec du -sh "{}" \; | sort -h'
alias sbig='sudo find -maxdepth 1 -exec du -sh "{}" \; | sort -h'

ตอนนี้ฉันสามารถดำเนินการbigเพื่อค้นหาไดเรกทอรีที่ใหญ่ที่สุดในไดเรกทอรีและsbigเมื่อฉันต้องการสิทธิ์ sudo


0
du -ahd1 | sort -hr | head -10

ต่อไปนี้เป็นคำอธิบายของ-dตัวเลือกในdu --help:

-d, --max-depth = N พิมพ์ผลรวมสำหรับไดเรกทอรี (หรือไฟล์ด้วย - ทั้งหมด) เฉพาะเมื่อมันเป็น N หรือน้อยกว่าระดับต่ำกว่าอาร์กิวเมนต์บรรทัดคำสั่ง; --max-depth = 0 จะเหมือนกับ --summarize


แม้ว่าสิ่งนี้อาจช่วยในการแก้ปัญหา แต่ก็ไม่ได้อธิบายว่าทำไมและ / หรือวิธีการแก้ไขปัญหา การให้บริบทเพิ่มเติมนี้จะช่วยเพิ่มมูลค่าทางการศึกษาในระยะยาวอย่างมีนัยสำคัญ โปรดแก้ไขคำตอบของคุณเพื่อเพิ่มคำอธิบายรวมถึงข้อ จำกัด และข้อสมมติฐานที่ใช้ ขอบคุณ
fixer1234

0

คำสั่งนี้จะช่วยให้คุณตรวจสอบการใช้งานดิสก์ได้รับในไดเรกทอรีและดำเนินการดังต่อไปนี้
"du -sch. [!.] * * | sort -h"

นี่คือตัวอย่างของวิธีการคำนวณการใช้งานดิสก์ของไดเรกทอรีเฉพาะ ฉันได้สร้างไดเรกทอรีชื่อ Du_sh และสร้างสองไฟล์ (หนึ่งซ่อน 10 MB และปกติ 20 MB) ภายใน

nikhil@debian:~$ mkdir Du_sh nikhil@debian:~$ cd Du_sh/ nikhil@debian:~/Du_sh$ dd if=/dev/zero of=.10MB bs=1024 count=10240 10240+0 records in 10240+0 records out 10485760 bytes (10 MB, 10 MiB) copied, 0.0299941 s, 350 MB/s nikhil@debian:~/Du_sh$ nikhil@debian:~/Du_sh$ dd if=/dev/zero of=20MB bs=2048 count=10240 10240+0 records in 10240+0 records out 20971520 bytes (21 MB, 20 MiB) copied, 0.0342258 s, 613 MB/s nikhil@debian:~/Du_sh$ du -sch .[!.]* * 10M .10MB 20M 20MB 30M total nikhil@debian:~/Du_sh$ du -sch .[!.]* * | sort -h 10M .10MB 20M 20MB 30M total nikhil@debian:~/Du_sh$

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