Привет я делаю некоторые очистки на моем сервере, и я хочу знать, как я могу получить общий размер папки с файлами 1 МБ и более, а также 1 МБ и ниже. Я добрался до:
ls -lh | grep 'M '
Но я не могу получить общий размер всего.

Привет я делаю некоторые очистки на моем сервере, и я хочу знать, как я могу получить общий размер папки с файлами 1 МБ и более, а также 1 МБ и ниже. Я добрался до:
ls -lh | grep 'M '
Но я не могу получить общий размер всего.

Вместо парсинга вывода ls (что считается очень плохой практикой †), вы можете использовать find и du следующим образом:
Чтобы найти все файлы (-type f) в текущем каталоге и подкаталогах размером ≥1M (-size -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}'