سؤال كيف يمكنني العثور على ملفات أكبر / أصغر من x بايت؟


في جهاز طرفي ، كيف يمكنني العثور على ملفات أكبر أو أصغر من x بايت؟

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

find . -exec ls -l {} \;

ثم توجيه النتيجة إلى awk لتصفية حسب حجم الملف. لكن ألا يجب أن تكون هناك طريقة أسهل من ذلك؟


193
2017-10-28 23:09


الأصل




الأجوبة:


استعمال:

find . -type f -size +4096c

العثور على ملفات أكبر من 4096 بايت.

و:

find . -type f -size -4096c

للبحث عن ملفات أصغر من 4096 بايت.

لاحظ الاختلافين + و- بعد مفتاح الحجم.

ال -size وأوضح التبديل:

-size n[cwbkMG]

    File uses n units of space. The following suffixes can be used:

    `b'    for 512-byte blocks (this is the default if no suffix  is
                                used)

    `c'    for bytes

    `w'    for two-byte words

    `k'    for Kilobytes       (units of 1024 bytes)

    `M'    for Megabytes    (units of 1048576 bytes)

    `G'    for Gigabytes (units of 1073741824 bytes)

    The size does not count indirect blocks, but it does count
    blocks in sparse files that are not actually allocated. Bear in
    mind that the `%k' and `%b' format specifiers of -printf handle
    sparse files differently. The `b' suffix always denotes
    512-byte blocks and never 1 Kilobyte blocks, which is different
    to the behaviour of -ls.

305
2017-10-28 23:37



@ جاي: من رجل يجد في بداية قسم "الاختبارات": "يمكن تحديد الوسيطات الرقمية كـ + n أكبر من n و n لأقل من n، n لـ n بالضبط." - Dennis Williamson
تشير الصفحة المنفردة إلى الجزء العلوي وتوضح أن + و - يمكن أن تنطبق على جميع المحولات التي تأخذ الحجج الرقمية ('n') ، بما في ذلك + و - يعني. (ابحث عن TESTS في صفحة الرجل للعثور على بداية القسم الذي تم وصف هذا فيه) - Slartibartfast
@ دنيس وليامسون: غريب ، + و - العمل في نظام التشغيل العاشر ، ولكن صفحة الرجل ليس لديها قسم الاختبارات. في الواقع ، فهي تفتقد جزءًا كبيرًا مقارنة برابطك ، فهي تفتقد إلى TESTs و ACTIONS و OPERATORS وغيرها. - ceiling cat
يبدو أن إصدار GNU لصفحة الرجل يحتوي على قسم "الاختبارات" ، لكن إصدار BSD لا. linuxmanpages.com/man1/find.1.php - Jay
أنا فقط وجدت صفحات رجل BSD لا تصف +/- شيء. طريقها في نهاية قسم "المرحلة الأولية". - جميع الانتخابات التمهيدية التي تأخذ حجة رقمية تسمح أن يسبق الرقم علامة زائد ("+") أو علامة ناقص ("-"). تعني علامة الزائد السابقة "أكثر من n" ، تعني علامة الطرح السابقة "أقل من n" ولا تعني "n بالضبط" - Jay


أعتقد find قد يكون مفيدًا لوحده بدون استخدام أنابيب في AWK. فمثلا،

find ~ -type f -size +2k  -exec ls -sh {} \;

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

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

لمزيد من المعلومات ، اقرأ صفحة رجل ل find.


6
2017-10-25 22:03





AWK حقا من السهل جدا لهذا النوع من الأشياء. إليك بعض الأشياء التي يمكنك فعلها بها فيما يتعلق بفحص حجم الملف ، كما طلبت:

قائمة الملفات أكبر من 200 بايت:

ls -l | awk '{if ($5 > 200) print $8}'

قائمة الملفات أقل من 200 بايت وكتابة القائمة إلى ملف:

ls -l | awk '{if ($5 < 200) print $8}' | tee -a filelog

قائمة الملفات من 0 بايت ، تسجيل القائمة إلى ملف وحذف الملفات الفارغة:

ls -l | awk '{if ($5 == 0) print $8}' | tee -a deletelog | xargs rm

4
2017-10-29 00:01



إعراب ls ليست جيدة - phuclv
ما هو الفرق بين الأنابيب إلى tee ومجرد إعادة التوجيه إلى ملف ، مثل ls -l > filelog (أو ls -l >> filelog)؟ - OmarOthman


أكبر من 2000 بايت:

du -a . | awk '$1*512 > 2000 {print $2}'

أقل من 2000 بايت:

du -a . | awk '$1*512 < 2000 {print $2} '

3
2017-10-28 23:27



هذا أمر سيئ لأن دو يعطي المساحة على القرص مشغول. هذا ليس هو نفسه حجم الملف. على سبيل المثال ، إذا كان لديك نظام ملفات مضغوط (btrfs / zfs) ، فسوف تعطيك du نتيجة مختلفة عن ls التي تعرض حجم إلغاء الضغط الفعلي. - chris scott