Determine o tamanho do backup dos últimos 7 dias

3

Considere que eu tenho uma pasta /home/abdul/backup que contém o arquivo .gz dos últimos 1 anos ... Minha exigência é obter o tamanho dos últimos 7 dias ...

    
por Abdul 17.07.2013 / 13:56

3 respostas

7

find /home/abdul/backup -daystart -name '*.gz' -mtime -7 -exec du -h '{}' ';'

Como funciona:

find - faz o que diz na lata; desde que você não especificou qual sistema operacional você está usando, estou assumindo aqui que você tem acesso ao GNU find.

/home/abdul/backup - diretório inicial

-daystart - mede os tempos desde o início do dia (pode ou não ser o que você quer)

-name '*.gz' - apenas considere arquivos com nomes terminados em .gz (ou, mais precisamente, correspondendo *.gz )

-mtime -7 - tempo de modificação do arquivo nas últimas 7 * 24 horas, levando em conta -daystart

-exec du -h '{}' ';' - execute du para imprimir o tamanho do arquivo nomeado, em unidades legíveis ( {} expande para o nome do arquivo em questão)

Isso listará todos os arquivos que foram modificados nos últimos 7 dias. Dependendo de qual SO e sistema de arquivos exatos você está executando, pode ser possível basear uma verificação na hora de criação do arquivo, mas muitos sistemas * nix não registram a hora em que um arquivo foi inicialmente criado ou "nascido".

    
por 17.07.2013 / 14:13
2
find . -ctime -7 | xargs ls -l | awk '{ TOTAL += $5;} END{print TOTAL;}'

Isso primeiro listará os arquivos com menos de 7 * 24 horas no diretório atual, obterá seu tamanho em bytes, resumirá e fornecerá o resultado.

    
por 17.07.2013 / 14:12
2

Se os nomes dos seus arquivos não contiverem espaços ou outros caracteres estranhos, você poderá fazer isso:

du -sch "$(find /home/abdul/backup -name '*.gz' -mtime +7) "

Para espaços e outros caracteres estranhos, use isso:

find /home/abdul/backup -name '*.gz' -mtime -7 -print0 | xargs -0 du -sch

Se você tiver um lote de arquivos que correspondam aos seus critérios, ambos os comandos acima falharão. O primeiro porque a lista de arquivos é muito longa e o segundo porque xargs será dividido em vários comandos e retornará o total para cada subconjunto.

Outra solução que evita esses problemas é (graças a Paulo Almeida, cujo comentário mencionou isso):

find /home/abdul/backup -name '*.gz' -mtime -7 -print0 | du -sch --files0-from -

De man du :

  --files0-from=F
          summarize  disk  usage  of  the NUL-terminated
          file names specified in file F; If F is - then
          read names from standard input
    
por 17.07.2013 / 16:00