Bash: excluir arquivos antigos, exceto um

2

Estou usando o seguinte comando para excluir arquivos de backup antigos:

find backups/ -name "bak_*.tbz" -mmin +4800 -exec rm -vf {} \;

O problema: quando não há novos arquivos, todos os arquivos são excluídos. Eu gostaria de manter o mais novo nesse caso.

Qual é uma maneira elegante de excluir arquivos antigos, exceto o mais novo?

    
por Witek 31.01.2014 / 11:05

1 resposta

4
 find  backups/ -name "bak_*.tbz" -mmin +4800 -type f -printf '%T@ %p\n' | sort -k 1nr |\
      tail -n +2 | cut -d ' ' -f 2 | xargs echo rm {}

Isto assume o GNU find e imprime a hora da modificação e o nome do arquivo, classifica isto pelo tempo da modificação, exclui a primeira linha (arquivo mais recente), remove a coluna mod time e passa para xargs para exclusão (como afirmado, só ecoará o comando delete, na verdade não o fará).

    
por 31.01.2014 / 11:37