У меня есть 15 жестких дисков SATA, подключенных к моему компьютеру, и мне нужно пройти через них один по одному записывать свободное место, а затем подводить итоги - не идеально.
Есть ли команда или комбинация команд, которая могла бы это сделать? В идеале я мог бы передать что-то вроде / dev / sd *
, поскольку я не хочу включать диски nvme.
РЕДАКТИРОВАТЬ: Мне следует чаще читать справочные страницы. Это так же просто, как
df --total -h /dev/sd*
Хорошо, я кое-что выяснил
df --output=avail /dev/sd* | tail -n +2 | datamash sum 1
В основном это выводит список смонтированных дисков и отображение только доступного пространства в качестве вывода, а затем использование tail для удаления первой строки, которая является заголовком столбца Доступно
, а затем, наконец, суммирование чисел с помощью datamash.
Помните о команде df
, чтобы исключить записи виртуального RAM-диска, такие как / dev
, используйте параметр -x
:
df -x tmpfs -x devtmpfs --total -h
Другой способ сделать это - с помощью команды lsblk
-l
выводить в формате списка -n
пропустить строку заголовка -b
напечатать в bytes -o
выводит указанные столбцы FSAVAIL
распечатать размер файловой системы доступно / свободно lsblk -l -n -b -o FSAVAIL | grep -v ^$ | \
awk '{sum+=$1} END{print sum}' | numfmt --to=iec
Используйте grep
, чтобы исключить пустые строки, awk
для суммирования первого столбца и, наконец, numfmt
для преобразования байтов в «читаемый человеком» формат.