Encontrar pastas de uma determinada idade, filtrar por um determinado tamanho e excluir as pastas correspondentes?

1

Eu tenho tido problemas com isso há algum tempo. Aqui está o que eu finalmente descobri que parece funcionar, embora eu tenha habilidades muito limitadas com a tubulação.

Eu estou supondo que esta é uma maneira ruim de alcançar meu objetivo, existem algumas maneiras mais simples que eu poderia fazer isso que seria mais eficiente?

$ find /home/data/cam*/* -maxdepth 0 -type d -mtime +30 \
    -exec du -sm {} \;| awk '{if ( $1 > 3000 ) print $2}' | xargs rm -rf
    
por nathan 30.06.2015 / 09:09

1 resposta

1

É muito bom, na verdade. Supondo que a parte /home/data/cam*/* -maxdepth 0 esteja bem, e supondo que seus nomes de diretório não contenham novas linhas, eu faria assim:

find /home/data/cam*/* -maxdepth 0 -type d -mtime +30 -exec du -sm {} + | \
    awk '$1 > 3000' | cut -f 2- | xargs rm -rf

-exec du -sm {} + é uma otimização, não é executado du para cada diretório. E awk '$1 > 3000' | cut -f 2- garante que isso ainda funcione se os nomes dos diretórios contiverem espaços.

    
por 30.06.2015 / 09:23

Tags