سؤال بشكل متكرر حساب جميع الملفات في دليل [نسخة مكررة]


ممكن تكرار:
كيف يمكنني حساب عدد المجلدات في محرك أقراص باستخدام Linux؟ 

لديّ شجرة دليل عميقة جدًا في مربع Linux. أرغب في حساب جميع الملفات الموجودة في هذا المسار ، بما في ذلك جميع الدلائل الفرعية.

على سبيل المثال ، في ضوء شجرة هذا الدليل:

/home/blue
/home/red
/home/dir/green
/home/dir/yellow
/home/otherDir/

إذا قمت بالمرور /home، أود أن يعود أربعة ملفات. أو نقاط المكافأة في حالة إرجاع أربعة ملفات واثنين من الدلائل. في الأساس ، أريد مكافئًا للنقر بزر الماوس الأيمن فوق مجلد على Windows وتحديد خصائص ورؤية عدد الملفات / المجلدات الموجودة في هذا المجلد.

كيف يمكنني أن أفعل ذلك بسهولة؟ لدي حل يتضمن نص بيثون كتبت ، ولكن لماذا لا يكون هذا سهلاً مثل تشغيله ls | wc أو مشابه؟


170
2017-10-12 21:41


الأصل


ليس بالضبط ما تبحث عنه ، ولكن للحصول على إجمالي كلي سريع جدًا ، إذا ك locate قاعدة البيانات محدثة: locate /some/path | wc -l (أو على جهاز Mac الخاص بي: locate -c /some/path). لكن: سيحسب هذا أيضًا الملفات في /this/other/path/with/some/pathوستحسب المجلدات نفسها. - Arjan
بالمناسبة ، هذه مشكلة مختلفة ، ولكنها وثيقة الصلة (عد كل الدلائل على محرك الأقراص) والحل: superuser.com/questions/129088/... - Amanda


الأجوبة:


find . -type f | wc -l

تفسير:
find . -type f يجد كل الملفات ( نوع و ) في هذا ( . ) الدليل وفي جميع الدلائل الفرعية ، ثم يتم طباعة أسماء الملفات إلى معيار خارج واحد لكل سطر.

هذا هو ثم piped | إلى wc (عدد الكلمات) -l يخبر الخيار wc لحساب خطوط الإدخال الخاصة به فقط.

معا تحسب كل ملفاتك.


293
2017-10-12 21:44





الإجابات المذكورة أعلاه تجب بالفعل على السؤال ، ولكن سأضيف أنه إذا كنت تستخدم البحث بدون الحجج (باستثناء المجلد الذي تريد أن يحدث فيه البحث) كما في:

find . | wc -l

يذهب البحث أسرع بكثير ، لحظية ، أو على الأقل بالنسبة لي. ويرجع ذلك إلى أن جملة النوع يجب أن تقوم بتشغيل استدعاء نظام stat () على كل اسم للتحقق من نوعه - حيث إن حذفه يتجنب القيام بذلك.

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


45
2018-03-28 22:00





للملفات:

find -type f | wc -l

للأدلة:

find -mindepth 1 -type d | wc -l

كلاهما يعمل في دليل العمل الحالي.


25
2017-10-12 21:56





مع باش 4+

shopt -s globstar
for file in **/*
do
  if [ -d "$file" ];then
    ((d++))
  elif [ -f "$file" ];then
     ((f++))
  fi
done
echo "number of files: $f"
echo "number of dirs: $d"

لا حاجة لاستدعاء البحث مرتين إذا كنت تريد البحث عن الملفات والدلائل


8
2017-10-13 01:58





تحديث طفيف إلى الإجابة المقبولة ، إذا كنت تريد عدد من dirs وهذا

find $DIR -exec stat -c '%F' {} \; | sort | uniq -c | sort -rn

7
2017-10-13 14:26



على جهاز Mac / BSD: find $DIR -exec stat -f '%HT' {} \; | sort | uniq -c | sort -rn (هنا ، اكتب %T فارغة لملف عادي أو علامة نجمية لملف قابل للتنفيذ أو شرطة مائلة لمجلد ؛ بالتالي %HT هناك حاجة ، أو بعض النص الإضافي لتجنب الفراغ من عدم العد ، مثل > %T.) - Arjan
يعطيني "العثور على: خيار غير قانوني - ه" على بلدي ماك 10.13.6 - K.-Michael Aye