我正在尝试找到 /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 {} +"