如何找到多台服务器上最大的文件并计算其大小总和?

如何找到多台服务器上最大的文件并计算其大小总和?

我正在尝试找到 /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中的结果获取找到的所有文件的总大小?

我计划对该脚本进行一些调整,以查找日志目录和本地备份目录的总大小,以便更好地了解多台服务器的综合磁盘使用情况。我不确定如何才能找到总磁盘使用情况。

答案1

当我使用 时-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 {} +"

相关内容