Я пытаюсь найти самые большие файлы в каталоге / export / home и сложить (суммировать) их размеры.
Сценарий:
#!/bin/bash
filename=hostnames
> export_home.log
while read -r -a line
do
hostname=${line//\"}
echo $hostname":" >> export_home.log
ssh -n -t -t $hostname "sudo find /export/home -type f -mtime +180 -size +250000k -exec du -hsk {} \;" >> export_home.log
done < "$filename"
Пример вывода:
server-34:
210M /export/home/john/142933-02/failsafe_archive
178M /export/home/john/137137-09/failsafe_archive
server-35:
server-36:
142M /export/home/marc/bdb/db-5.2.36.tar
446M /export/home/marc/sunfreeware/git/git-1.7.6-sol10-x86-local
1.4G /export/home/marc/mysql/mysql-5.5.16-solaris10-x86_64.tar
1.1G /export/home/marc/mysql/mysql-5.5.16-solaris10-i386.tar
server-37:
Этот скрипт отлично справляется с тем, что должен, но как теперь получить общий размер ВСЕХ файлов, найденных на основе результатов в export_home?
Я планирую внести несколько изменений в этот сценарий, чтобы определить общий размер каталогов журналов и локальных резервных каталогов, чтобы лучше понять комбинированное использование диска на нескольких серверах. Я не уверен, как я смогу определить общее использование диска.
Когда я использую -k
, Я не слышу суффиксов "M" и "G". Если вы получаете суффиксы, вам следует использовать предложение jeffatrackaid, чтобы размеры были масштабированы до той же величины.
Есть много способов суммировать значения. Вот один:
#!/bin/bash
filename=hostnames
# no need to clear the file, just move the output redirection to the end of the loop
# are you reading into an array to split the line (hostname would be in ${line[0]})?
while read -r -a line
do
hostname=${line//\"}
echo "$hostname:"
ssh -n -t -t "$hostname" "sudo find /export/home -type f -mtime +180 -size +250000k -exec du -hsk {} \;"
done < "$filename" | tee export_home.log | awk '{t += $1} END {print "grand total:", t}'
Если ваша версия find
поддерживает это, попробуйте использовать +
вместо того \;
- это быстрее.
ssh -n -t -t "$hostname" "sudo find /export/home -type f -mtime +180 -size +250000k -exec du -hsk {} +"