Як в Linux ви отримуєте загальний розмір папки для файлів розміром 1 Мб і більше


2

Привіт, я займаюся чисткою на моєму сервері, і я хочу знати, як я отримаю загальний розмір папки файлів розміром 1 Мб і вище, а також 1 Мб і нижче. Я дістався:

ls -lh | grep 'M '

Але я не можу отримати загальний розмір всього.

введіть тут опис зображення

Відповіді:


4

Замість розбору результатів ls(що вважається дійсно поганою практикою ), ви можете використовувати findі duтак:

  • Щоб знайти всі файли ( -type f) у поточному каталозі та підкаталогах розміром ≥1M ( -size +1M), і отримати суму їх розмірів:

    find . -type f -size +1M -print0 | du -sch --files0-from=- | tail -1
    
  • Подібні, але не повторюються у підкаталогах ( -maxdepth 1):

    find . -maxdepth 1 -type f -size +1M -print0 | du -sch --files0-from=- | tail -1
    
  • Для файлів розміром ≤1M:

    find . -type f -size -1M -print0 | du -sch --files0-from=- | tail -1
    find . -maxdepth 1 -type f -size -1M -print0 | du -sch --files0-from=- | tail -1
    

Це працює за умови, що ваша версія duпідтримує цю --files0-fromопцію. Якщо ні, ви можете спробувати це:

find . -type f -size +1M -exec du -sch {} + | tail -1

але якщо у вас занадто багато файлів, воно не працюватиме (ви отримаєте неправильну відповідь)! У цьому випадку ви можете спробувати це замість цього:

find . -type f -size +1M -exec sh -c 'du -sch "$@" | tail -1' _ {} +

тоді у вас буде кілька рядків (сподіваємось, не дуже багато), і вам доведеться робити математику самостійно.

З findвас є повний контроль над якими файлами ви хочете , щоб розглянути! його можливості фільтрації здебільшого нескінченні.

Ура!


  Ви отримаєте неправильні відповіді, якщо ls -1h | grep 'M 'у вас є файли, що містять рядок "M ". І висновок lsповинен читати людина, а не машини ... Машини мають інші набагато кращі засоби для отримання такого роду інформації.


+1 за гарну відповідь із поясненнями. Я просто хотів би додати ще один варіант: find / path / to / search -type f -size + 1M -ls | awk '{SUM + = $ 2} END {print SUM}'
Hennes

0

Це працювало для мене.

ls -lh | grep 'M' | awk '{ SUM += $5} END {print SUM}'

для чого коштує 5 доларів і як ви отримуєте це? пробілами між словами?
Патоші パ ト シ

1
$ 5 - це п’яте поле ls -lрезультату. (Який розмір файлу). Вихідний показник розбору вважається поганою формою, і він порушиться, якщо ls колись зміниться. Використання find -ls робить те саме і вважається кращим рішенням. І це може поєднуватися з -типом f при використанні підкаталогів.
Hennes
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.