استخدام ls لسرد الدلائل وأحجامها الإجمالية

سئل على ١٩ يونيو ٢٠٠٩  ·  تمت مشاهدة 807.3k مرة  ·  مصدر

kmorris511 picture
في ١٩ يونيو ٢٠٠٩

هل من الممكن استخدام ls في نظام Unix لسرد الحجم الإجمالي لمجلد فرعي وكافة محتوياته بدلاً من 4K المعتاد الذي (أفترض) أنه مجرد ملف الدليل نفسه؟

total 12K
drwxrwxr-x  6 *** *** 4.0K 2009-06-19 10:10 branches
drwxrwxr-x 13 *** *** 4.0K 2009-06-19 10:52 tags
drwxrwxr-x 16 *** *** 4.0K 2009-06-19 10:02 trunk

بعد البحث في صفحات الرجل جئت فارغة.

الإجابات

molf picture
في ١٩ يونيو ٢٠٠٩
1645

جرب شيئًا مثل:

du -sh *

نسخة مختصرة من:

du --summarize --human-readable *

تفسير:

du : D isk U sage

-s : عرض ملخص لكل ملف محدد. (ما يعادل -d 0 )

-h : إخراج "مقروء من قبل الإنسان". استخدم لاحقات الوحدات: B yte و K ibibyte (KiB) و M ebibyte (MiB) و G ibibyte (GiB) و T ebibyte (TiB) و P ebibyte (PiB). (BASE2)

GraveDigger picture
في ٩ أبريل ٢٠١٣
343

du -sk * | sort -n سيقوم بفرز المجلدات حسب الحجم. مفيد عند البحث عن مساحة فارغة ..

user2969885 picture
في ٨ نوفمبر ٢٠١٣
114
du -sh * | sort -h

سيتم عرض هذا في شكل يمكن قراءته من قبل الإنسان.

Jay Chakra picture
في ١٧ أغسطس ٢٠١٥
57

لسرد أكبر الأدلة من الدليل الحالي بتنسيق يمكن للبشر قراءته:

du -sh * | sort -hr

أفضل طريقة لتقييد عدد الصفوف يمكن أن تكون

du -sh * | sort -hr | head -n10

حيث يمكنك زيادة لاحقة العلم -n لتقييد عدد الصفوف المدرجة

عينة:

[~]$ du -sh * | sort -hr
48M app
11M lib
6.7M    Vendor
1.1M    composer.phar
488K    phpcs.phar
488K    phpcbf.phar
72K doc
16K nbproject
8.0K    composer.lock
4.0K    README.md

يجعله أكثر ملاءمة للقراءة :)

Sebi picture
في ١٨ فبراير ٢٠١٥
28

لعرضه بتنسيق ls -lh ، استخدم:

(du -sh ./*; ls -lh --color=no) | awk '{ if($1 == "total") {X = 1} else if (!X) {SIZES[$2] = $1} else { sub($5 "[ ]*", sprintf("%-7s ", SIZES["./" $9]), $0); print $0} }'

شرح كود Awk:

if($1 == "total") { // Set X when start of ls is detected
  X = 1 
} else if (!X) { // Until X is set, collect the sizes from `du`
  SIZES[$2] = $1
} else {
  // Replace the size on current current line (with alignment)
  sub($5 "[ ]*", sprintf("%-7s ", SIZES["./" $9]), $0); 
  print $0
}

إخراج العينة:

drwxr-xr-x 2 root     root 4.0K    Feb 12 16:43 cgi-bin
drwxrws--- 6 root     www  20M     Feb 18 11:07 document_root
drwxr-xr-x 3 root     root 1.3M    Feb 18 00:18 icons
drwxrwsr-x 2 localusr www  8.0K    Dec 27 01:23 passwd
Keith Smith picture
في ٢٢ يونيو ٢٠٠٩
20

الأمر الذي تريده هو 'du -sk' du = "استخدام القرص"

تمنحك العلامة -k الإخراج بالكيلو بايت ، بدلاً من du الافتراضية لقطاعات القرص (كتل 512 بايت).

ستدرج علامة -s الأشياء في دليل المستوى الأعلى فقط (أي الدليل الحالي افتراضيًا أو الدليل المحدد في سطر الأوامر). من الغريب أن لدى du السلوك المعاكس لـ ls في هذا الصدد. بشكل افتراضي ، ستمنحك du بشكل متكرر استخدام القرص لكل دليل فرعي. في المقابل ، سيعطي الأمر ls ملفات القائمة في الدليل المحدد فقط. (يمنحك ls -R سلوكًا تكراريًا.)

Kusalananda picture
في ٢٥ يونيو ٢٠١٦
14

ضع إعلان وظيفة الصدفة هذا في سكربتات تهيئة الصدفة:

function duls {
    paste <( du -hs -- "[email protected]" | cut -f1 ) <( ls -ld -- "[email protected]" )
}

لقد أطلقت عليه اسم duls لأنه يظهر الناتج من كل من du و ls (بهذا الترتيب):

$ duls
210M    drwxr-xr-x  21 kk  staff  714 Jun 15 09:32 .

$ duls *
 36K    -rw-r--r--   1 kk  staff    35147 Jun  9 16:03 COPYING
8.0K    -rw-r--r--   1 kk  staff     6962 Jun  9 16:03 INSTALL
 28K    -rw-r--r--   1 kk  staff    24816 Jun 10 13:26 Makefile
4.0K    -rw-r--r--   1 kk  staff       75 Jun  9 16:03 Makefile.am
 24K    -rw-r--r--   1 kk  staff    24473 Jun 10 13:26 Makefile.in
4.0K    -rw-r--r--   1 kk  staff     1689 Jun  9 16:03 README
120K    -rw-r--r--   1 kk  staff   121585 Jun 10 13:26 aclocal.m4
684K    drwxr-xr-x   7 kk  staff      238 Jun 10 13:26 autom4te.cache
128K    drwxr-xr-x   8 kk  staff      272 Jun  9 16:03 build
 60K    -rw-r--r--   1 kk  staff    60083 Jun 10 13:26 config.log
 36K    -rwxr-xr-x   1 kk  staff    34716 Jun 10 13:26 config.status
264K    -rwxr-xr-x   1 kk  staff   266637 Jun 10 13:26 configure
8.0K    -rw-r--r--   1 kk  staff     4280 Jun 10 13:25 configure.ac
7.0M    drwxr-xr-x   8 kk  staff      272 Jun 10 13:26 doc
2.3M    drwxr-xr-x  28 kk  staff      952 Jun 10 13:26 examples
6.2M    -rw-r--r--   1 kk  staff  6505797 Jun 15 09:32 mrbayes-3.2.7-dev.tar.gz
 11M    drwxr-xr-x  42 kk  staff     1428 Jun 10 13:26 src

$ duls doc
7.0M    drwxr-xr-x  8 kk  staff  272 Jun 10 13:26 doc

$ duls [bM]*
 28K    -rw-r--r--  1 kk  staff  24816 Jun 10 13:26 Makefile
4.0K    -rw-r--r--  1 kk  staff     75 Jun  9 16:03 Makefile.am
 24K    -rw-r--r--  1 kk  staff  24473 Jun 10 13:26 Makefile.in
128K    drwxr-xr-x  8 kk  staff    272 Jun  9 16:03 build

تفسير:

تنشئ الأداة المساعدة paste أعمدة من مدخلاتها وفقًا للمواصفات التي تقدمها لها. بالنظر إلى ملفي إدخال ، فإنه يضعهما جنبًا إلى جنب ، مع وجود علامة تبويب كفاصل.

نعطيه ناتج du -hs -- "[email protected]" | cut -f1 كملف أول (تدفق المدخلات بالفعل) والمخرج ls -ld -- "[email protected]" كملف ثان.

في الوظيفة ، سيتم تقييم "[email protected]" إلى قائمة جميع وسيطات سطر الأوامر ، كل منها بعلامات اقتباس مزدوجة. لذلك سوف يفهم الحروف المتلألئة وأسماء المسارات بمسافات وما إلى ذلك.

تشير علامة الطرح المزدوجة ( -- ) إلى نهاية خيارات سطر الأوامر إلى du و ls . بدون هذه ، فإن قول duls -l سيؤدي إلى إرباك du وأي خيار لـ du لم يكن موجودًا في ls ls شأنه أن يربك ls (و قد لا تعني الخيارات الموجودة في كلتا الأدوات المساعدة نفس الشيء ، وستكون فوضى كبيرة).

يقوم cut بعد du بقص العمود الأول من الناتج du -hs (الأحجام).

قررت أن أضع الناتج du على اليسار ، وإلا كنت سأضطر إلى إدارة العمود الأيمن المتذبذب (بسبب اختلاف أطوال أسماء الملفات).

لن يقبل الأمر إشارات سطر الأوامر.

تم اختبار هذا في كل من bash و ksh93 . لن تعمل مع /bin/sh .

ncdu (ncurses du )

تتيح لك أداة CLI الرائعة هذه العثور بسهولة على الملفات والدلائل الكبيرة (الحجم الإجمالي المتكرر) بشكل تفاعلي.

على سبيل المثال ، من داخل جذر مشروع مفتوح المصدر معروف جيدًا نقوم بما يلي:

sudo apt install ncdu
ncdu

النتيجة:

enter image description here

بعد ذلك ، أدخل لأسفل وعلى لوحة المفاتيح مباشرة للانتقال إلى المجلد /drivers ، وأرى:

enter image description here

ncdu يحسب فقط أحجام الملفات بشكل متكرر مرة واحدة عند بدء تشغيل الشجرة بأكملها ، لذلك فهي فعالة.

"إجمالي استخدام القرص" مقابل "الحجم الظاهري" مشابه لـ du ، وقد أوضحت ذلك على: لماذا غالبًا ما يختلف إخراج "du" عن "du -b"

الصفحة الرئيسية للمشروع: https://dev.yorhel.nl/ncdu

أسئلة ذات صلة:

تم الاختبار في Ubuntu 16.04.

استخدام غير تفاعلي ncdu

ميزة أخرى رائعة لـ ncdu هي أنه يمكنك أولاً تفريغ الأحجام بتنسيق JSON ، ثم إعادة استخدامها لاحقًا.

على سبيل المثال ، لإنشاء الملف ، قم بما يلي:

ncdu -o ncdu.json

ثم قم بفحصها بشكل تفاعلي مع:

ncdu -f ncdu.json

هذا مفيد جدًا إذا كنت تتعامل مع نظام ملفات كبير جدًا وبطيء مثل NFS.

بهذه الطريقة ، يمكنك أولاً التصدير مرة واحدة فقط ، الأمر الذي قد يستغرق ساعات ، ثم استكشاف الملفات ، والإنهاء ، والاستكشاف مرة أخرى ، وما إلى ذلك.

تنسيق الإخراج هو JSON فقط ، لذلك من السهل إعادة استخدامه مع البرامج الأخرى أيضًا ، على سبيل المثال:

ncdu -o -  | python -m json.tool | less

يكشف عن بنية بسيطة لبيانات شجرة الدليل:

[
    1,
    0,
    {
        "progname": "ncdu",
        "progver": "1.12",
        "timestamp": 1562151680
    },
    [
        {
            "asize": 4096,
            "dev": 2065,
            "dsize": 4096,
            "ino": 9838037,
            "name": "/work/linux-kernel-module-cheat/submodules/linux"
        },
        {
            "asize": 1513,
            "dsize": 4096,
            "ino": 9856660,
            "name": "Kbuild"
        },
        [
            {
                "asize": 4096,
                "dsize": 4096,
                "ino": 10101519,
                "name": "net"
            },
            [
                {
                    "asize": 4096,
                    "dsize": 4096,
                    "ino": 11417591,
                    "name": "l2tp"
                },
                {
                    "asize": 48173,
                    "dsize": 49152,
                    "ino": 11418744,
                    "name": "l2tp_core.c"
                },

تم الاختبار في Ubuntu 18.04.

MacOS 10.15.5 قائمة الجذر

لإدراج الجذر / بشكل صحيح على هذا النظام ، كنت بحاجة أيضًا إلى --exclude-firmlinks ، على سبيل المثال:

brew install ncdu
cd /
ncdu --exclude-firmlinks

وإلا بدا أنه يدخل في حلقة ارتباط لا نهائية ، ويرجع ذلك على الأرجح إلى: https://www.swiftforensics.com/2019/10/macos-1015-volumes-firmlink-magic.html

الأشياء التي نتعلمها من أجل الحب.

Crenshaw picture
في ١٩ يونيو ٢٠٠٩
7

أستخدم دائمًا du -sk ( -k علم يعرض حجم الملف بالكيلو بايت) بدلاً من ذلك.

StarDust picture
في ٢٢ يوليو ٢٠١٤
7
du -h --max-depth=1 . | sort -n -r