Привіт, я займаюся чисткою на моєму сервері, і я хочу знати, як я отримаю загальний розмір папки файлів розміром 1 Мб і вище, а також 1 Мб і нижче. Я дістався:
ls -lh | grep 'M '
Але я не можу отримати загальний розмір всього.
Привіт, я займаюся чисткою на моєму сервері, і я хочу знати, як я отримаю загальний розмір папки файлів розміром 1 Мб і вище, а також 1 Мб і нижче. Я дістався:
ls -lh | grep 'M '
Але я не можу отримати загальний розмір всього.
Відповіді:
Замість розбору результатів 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
повинен читати людина, а не машини ... Машини мають інші набагато кращі засоби для отримання такого роду інформації.
Це працювало для мене.
ls -lh | grep 'M' | awk '{ SUM += $5} END {print SUM}'
ls -l
результату. (Який розмір файлу). Вихідний показник розбору вважається поганою формою, і він порушиться, якщо ls колись зміниться. Використання find -ls робить те саме і вважається кращим рішенням. І це може поєднуватися з -типом f при використанні підкаталогів.