du comando combinado com find -mmin

2

Eu quero ter uma ideia de quanto archivelogs o banco de dados está gerando diariamente, então eu fiz:

find /u02/archivelog -mmin -1440 | du -sh e obtivemos 220 GB, que é o tamanho total de todos os arquivos nesse diretório e não apenas menos de 1 dia total.

Se em vez disso eu fiz find /u02/archivelog -mmin -1440 -exec ls -ltrh {} \; Isso funcionaria e listaria apenas os arquivos com menos de 1 dia. Mas a lógica parece não se aplicar com du .

Como posso melhorar a sintaxe para obter o resultado esperado?

    
por GuilhermeMesquitaX 23.10.2014 / 19:54

2 respostas

2

du não parece aceitar arquivos inseridos nele. Eu acho que o que você está procurando é

find /u02/archivelog -type f -mmin -1440 -exec du -ch {} +

Usar + em vez de ; faz com que o find crie {} como uma lista e seja executado uma vez, em vez de executar uma vez para cada correspondência. Você também precisa usar -type f , caso contrário, ele corresponderá ao próprio diretório, que é modificado toda vez que um novo arquivo é adicionado. Se você incluir o próprio diretório no du, você vai acabar com o tamanho de todos os arquivos novamente. O -c faz du mostrar uma linha "total" também. Se você quer apenas o total, pode adicionar | tail -1 ao final.

    
por 23.10.2014 / 20:08
1

Seu uso de {} \; limita o argumento de ls a um elemento. Se você estiver interessado no total de logs de arquivo que você pode usar:

find /u02/archivelog -mmin -1440 -type f -exec wc -c {} + | tail -1

Para obter o número total de bytes para os arquivos nesse diretório.

Onde o {} + coloca tantos nomes de arquivos na linha de comando apresentada ao wc como o sistema permite (então existe a possibilidade de wc ser chamado várias vezes se você tiver muitos arquivos e / ou extremamente longo nomes de arquivos).

    
por 23.10.2014 / 20:08