Привет я делаю некоторые очистки на моем сервере, и я хочу знать, как я могу получить общий размер папки с файлами 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}'