طريقة سريعة للعثور على عدد الملفات في دليل واحد على نظام Linux

StackOverflow https://stackoverflow.com/questions/3283582

سؤال

أنا أبحث عن طريقة سريعة للعثور على عدد الملفات في دليل على نظام Linux.

أي حل يستغرق وقتًا خطيًا في عدد الملفات الموجودة في الدليل غير مقبول (على سبيل المثال."ls | wc -l" وأشياء مماثلة) لأن الأمر سيستغرق وقتًا طويلاً للغاية (هناك عشرات أو ربما مئات الملايين من الملفات في الدليل).

أنا متأكد من أنه يجب تخزين عدد الملفات الموجودة في الدليل كرقم بسيط في مكان ما في بنية نظام الملفات (ربما inode؟)، كجزء من بنية البيانات المستخدمة لتخزين إدخالات الدليل - كيف يمكنني الوصول إلى هذا الرقم؟

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

هل كانت مفيدة؟

المحلول

لماذا يجب أن تحتوي هيكل البيانات على الرقم؟لا تحتاج الشجرة إلى معرفة حجمها في O (1)، ما لم يكن هناك شرط (وتوفير ذلك، قد يتطلب المزيد من القفل وربما عنق الزجاجة الأداء)

بواسطة شجرة لا أقصد بما في ذلك محتويات SUBDIR، ولكن الملفات مع -Maxdepth 1 - يفترض أنها ليست مخزنة حقا كقائمة ..

تحرير: ext2 تخزينها كقائمة مرتبطة.

الحديثة ext3 تنفذ تجزئة B-Trees P>

بعد أن قال ذلك، / BIN / LS يفعل الكثير من العد، ويقوم بالفعل بمسح جميع المعوقات.اكتب برنامج C أو البرنامج النصي الخاص بك باستخدام Opendir () و ReadDir ().

من هنا :

giveacodicetagpre.

نصائح أخرى

يمكنك استخدام Inotify لتتبع وتسجيل ملف إنشاء الأحداث وإلغاء تحديدها في الدليل المراقب.سيقوم بتوزيع الوقت الإجمالي اللازم للحفاظ على عدد الملفات والسماح لك باسترداد عدد الملفات الحالية على الفور.

لا يقوم inode الخاص بالدليل بتخزين عدد الملفات الموجودة فيه، نظرًا لأنه عادةً لا تكون هناك حاجة لعدد الملفات بشكل منفصل عن قائمة الأسماء الموجودة في الدليل.عدد الارتباطات الخاصة بالدليل يعطي بشكل غير مباشر عدد الدلائل الفرعية (st_nlink هو عدد الدير الفرعي زائد اثنين).

أعتقد أنه ليس لديك خيار سوى قراءة القائمة الكاملة للملفات الموجودة في الدليل.find قد يكون أو لا يكون أسرع من ls.

هذا مثال على سبب كون الدلائل الكبيرة مشكلة، حتى عند تنفيذ الدليل باستخدام شجرة B.

لا توجد طريقة محمولة للقيام بذلك.بداءات الملفات المنخفضة المستوى، أي Readdir ، العمل كما لو إنها قائمة خطية.بوضوح، هذا تجريد، وقد تخزن بعض أنظمة الملفات عدد.ومع ذلك، فإن الوصول إليه بطبيعته في نظام الملفات.

إذا كنت على استعداد للقفز من خلال الأطواق، فقد يكون لديك كل دليل في نظام ملفات مختلفة، واستخدام الحصص، والحصول على معلومات مع أمر "Refquota".

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top