كيف يمكنني تحديد الحجم الإجمالي للدليل (مجلد) من سطر الأوامر?

هل هناك أمر بسيط لعرض الحجم الكلي الكلي (استخدام القرص) لجميع الملفات في دليل (مجلد)?

لقد حاولت هذه ، وأنها لا تفعل ما أريد:

  • ls -l، والذي يعرض فقط حجم الملفات الفردية في دليل ، ولا
  • df -h، والذي يعرض فقط المساحة الحرة والمستخدمة على الأقراص الخاصة بي.

القيادة du "يلخص استخدام القرص لكل ملف ، بشكل متكرر للدلائل،" على سبيل المثال.,

du -hs /path/to/directory
  • -h هو الحصول على أرقام "الإنسان للقراءة" ، على سبيل المثال الحصول على 140M بدلا من 143260 (الحجم بالكيلوبايت)
  • -s هو ملخص (وإلا ستحصل ليس فقط على حجم المجلد ولكن أيضا لكل شيء في المجلد بشكل منفصل)

كما كنت تستخدم -h يمكنك فرز القيم المقروءة الإنسان باستخدام

du -h | sort -h

ال -h العلم على sort سوف تنظر في قيم حجم "الإنسان المقروء".


إذا كنت ترغب في تجنب سرد جميع الملفات والدلائل بشكل متكرر ، يمكنك توفير --max-depth المعلمة للحد من عدد العناصر المعروضة. الأكثر شيوعا, --max-depth=1

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

في الآونة الأخيرة وجدت أداة تفاعلية كبيرة ، نكورسيس مقرها ، والتي تعطيك بسرعة لمحة عامة عن أحجام الدليل. بحثت عن هذا النوع من الأدوات لسنوات.

  • الحفر بسرعة من خلال التسلسل الهرمي للملفات
  • يمكنك حذف الملفات المؤقتة الضخمة على سبيل المثال من داخل الأداة
  • سريع للغاية

كما أنها تفكر في ذلك باوباب لسطر الأوامر:

apt-get install ncdu

يعثر هذا على الحجم بشكل متكرر ويضعه بجوار كل اسم مجلد، جنبا إلى جنب مع الحجم الإجمالي في الأسفل ، كل ذلك بالتنسيق البشري

du -hsc *

استمتع!

du foldername

مزيد من المعلومات حول هذا الأمر هنا

أدناه هو ما أستخدمه لطباعة المجموع ، المجلد ، وحجم الملف:

$ 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/lib992K    /home/vivek/Downloads/gatling-charts-highcharts-bundle-2.2.2/results292K    /home/vivek/Downloads/gatling-charts-highcharts-bundle-2.2.2/target 52K    /home/vivek/Downloads/gatling-charts-highcharts-bundle-2.2.2/user-files

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.)

جعلت الإجابات من الواضح أن du هي أداة للعثور على الحجم الإجمالي للدليل. ومع ذلك ، هناك بعض العوامل التي يجب مراعاتها:

  • من حين لآخر, du يمكن أن يكون الإخراج مضللا لأنه يبلغ عن المساحة المخصصة بواسطة نظام الملفات ، والتي قد تكون مختلفة عن مجموع أحجام الملفات الفردية. عادة ما يقوم نظام الملفات بتخصيص 4096 بايت لملف حتى إذا قمت بتخزين حرف واحد فقط فيه!

  • اختلافات الإخراج بسبب قوة 2 وقوة 10 وحدات. ال -h التبديل إلى du يقسم عدد البايتات على 2^10 (1024), 2^20 (1048576) الخ لإعطاء إخراج الإنسان للقراءة. قد يكون الكثير من الناس أكثر اعتيادا على رؤية قوى 10 (على سبيل المثال 1 ك = 1000 ، 1 م = 1000000) ويفاجأون بالنتيجة.

للعثور على المجموع الكلي لأحجام جميع الملفات في دليل ، بالبايت ، قم بما يلي:

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

مثال:

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

يمكنك استخدام أداة الغبار:

PS C:\git> dust   0B       ┌── templates           │                                      █ │   0%   0B     ┌─┴ git-core              │                                      █ │   0%   0B   ┌─┴ share                   │                                      █ │   0%  76B   ├── readme.md               │                                      █ │   0% 156K   │   ┌── less.exe            │▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒█ │   2% 2.7M   │   ├── git-remote-https.exe│▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒█████████████████ │  42% 3.6M   │   ├── git.exe             │▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██████████████████████ │  56% 6.5M   │ ┌─┴ git-core              │███████████████████████████████████████ │ 100% 6.5M   ├─┴ libexec                 │███████████████████████████████████████ │ 100% 6.5M ┌─┴ .                         │███████████████████████████████████████ │ 100%

بلدي على سبيل المثال هو من ويندوز ، ولكن يتم دعم لينكس وأبل أيضا:

https://github.com/bootandy/dust

أنا مكيفة ل ll الأمر الذي هو الاسم المستعار ل ls -alF. إنه يفتقد فقط عدد الملفات وحجم الملفات في الأسفل. لقد لعبت مع du و tree ولكن لا يمكن الحصول على المجاميع كنت بحاجة. لذلك أنا خلقت lll للقيام بذلك بالنسبة لي.

في الخاص بك ~/.bashrc ضع ما يلي:

lll () {    ls -alF "$@"    arr=($(ls -alF "$@" | awk '{TOTAL+=$5} END {print NR, TOTAL}'))    printf " \33[1;31m ${arr[0]}\33[m line(s).  "    printf "Total size: \33[1;31m ${arr[1]}\33[m\n"#    printf "Total size: \33[1;31m $(BytesToHuman <<< ${arr[1]})\33[m\n"}

حفظ الملف والموارد باستخدام . ~/.bashrc (أو يمكنك إعادة تشغيل المحطة الطرفية).


إخراج العينة

الشيء الجميل حول ll الإخراج هو انها الألوان. يتم الحفاظ على هذا مع lll ولكن فقدت عند استخدام find أو du:

lll sample output.png


ليرة تركية ؛ الدكتور

وظيفة مكافأة يمكنك إضافتها إلى ~/.bashrc يسمى BytesToHuman(). هذا يفعل ما يتوقعه معظم مستخدمي وحدة التحكم من تحويل أعداد كبيرة إلى ميب ، بنك الخليج الدولي ، إلخ:

function BytesToHuman() {    # https://unix.stackexchange.com/questions/44040/a-standard-tool-to-convert-a-byte-count-into-human-kib-mib-etc-like-du-ls1/259254#259254    read StdIn    b=${StdIn:-0}; d=''; s=0; S=(Bytes {K,M,G,T,E,P,Y,Z}iB)    while ((b > 1024)); do        d="$(printf ".%02d" $((b % 1024 * 100 / 1024)))"        b=$((b / 1024))        let s++    done    echo "$b$d ${S[$s]}"} # BytesToHuman ()

التالي اقلب التعليق بين سطرين في lll () وظيفة لتبدو مثل هذا:

#    printf "Total size: \33[1;31m ${arr[1]}\33[m\n"    printf "Total size: \33[1;31m $(BytesToHuman <<< ${arr[1]})\33[m\n"

الآن الإخراج الخاص بك يبدو مثل هذا:

lll sample output 2.png

كما هو الحال دائما لا ننسى لإعادة المصدر مع . ~/.bashrc كلما إجراء تغييرات. (أو إعادة تشغيل المحطة بالطبع)

ملاحظة-أعطاني أسبوعان في الحجر الصحي الذاتي أخيرا وقتا للعمل على هذا الهدف البالغ من العمر خمس سنوات.

du /foldername هو الأمر القياسي لمعرفة حجم المجلد. من أفضل الممارسات العثور على الخيارات من خلال قراءة صفحة الرجل:

man du

يجب عليك قراءة صفحة الرجل (متاح على الانترنت) قبل استخدام الأمر.

تذكير ودية أنه قد يجعل ما يقرب من الصفر معنى على نظام الملفات البقر مثل بترفس.