Como faço para encontrar os maiores arquivos em vários servidores e somar seu tamanho?

3

Eu estou tentando encontrar os maiores arquivos no diretório / export / home e adicionar (somar) seus tamanhos.

Script:

#!/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"

Exemplo de saída:

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:

Este script faz perfeitamente o que deve ser feito, mas agora como eu também obtenho o tamanho total de TODOS os arquivos encontrados com base nos resultados da exportação_home?

Estou planejando fazer alguns ajustes para que esse script encontre o tamanho total dos diretórios de log e dos diretórios locais de backup, a fim de obter uma visão melhor do uso de disco combinado em vários servidores. Não sei como conseguirá encontrar uma utilização total do disco.

    
por ujjain 12.06.2013 / 16:09

1 resposta

2

Quando uso -k , não recebo sufixos "M" e "G". Se você está recebendo sufixos, então você deve usar a sugestão de jeffatrackaid para fazer os tamanhos escalados para a mesma magnitude.

Existem várias maneiras de totalizar os valores. Aqui está um:

#!/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}'

Se a sua versão de find oferecer suporte, tente usar + em vez de \; - é mais rápido.

    ssh -n -t -t "$hostname" "sudo find /export/home -type f -mtime +180 -size +250000k -exec du -hsk {} +"
    
por 12.06.2013 / 21:32