Exclui arquivos com mais de X dias com o último arquivo modificado

1

Existe alguma solução para excluir os arquivos com base na comparação da data de modificação com o arquivo modificado mais recentemente? Os arquivos mais antigos precisam ser excluídos em relação ao arquivo mais recente.

Por exemplo, se a data da última modificação for 09-10-2017, isso significa que os arquivos com 10 dias ou mais precisam ser excluídos. O mesmo se a data modificada for alterada; os arquivos a serem excluídos devem mudar de acordo.

    
por Vignesh Vignasivakara 09.10.2017 / 12:00

2 respostas

3

Com ferramentas GNU:

find . -type f -printf '%T@:%p
find . -type f -printf '%T@:%p%pre%' |
  sort -rzn |
  awk -v RS='%pre%' -v ORS='%pre%' -F: -v d=10 '
    NR == 1 {t = $1 - 86400 * d}
    $1 < t, 0 {sub(/[^:]*:/, ""); print}' |
  xargs -r0 echo rm
' | sort -rzn | awk -v RS='%pre%' -v ORS='%pre%' -F: -v d=10 ' NR == 1 {t = $1 - 86400 * d} $1 < t, 0 {sub(/[^:]*:/, ""); print}' | xargs -r0 echo rm

(remova o echo quando feliz).

Estamos recebendo find para imprimir 123456.123:./path/to/file<NUL> para cada arquivo (com 123456.123 sendo a hora da última modificação dos arquivos).

Estamos classificando isso numericamente (assim, o arquivo mais novo vem primeiro) e, em seguida, usando awk para encontrar aqueles que são mais de 10 dias mais antigos que o arquivo mais recente (encontrado no primeiro registro dessa lista classificada).

    
por 09.10.2017 / 12:17
0

Sinto que o comando abaixo ajudaria se você estiver trabalhando no sistema operacional baseado em Linux.

find /path/to/directory/ -mindepth 1 -mtime +7 -delete

+7 = variável, o que significa que arquivos com mais de 7 dias serão excluídos

Cuidado com espaços, aspas para rm.

    
por 24.07.2018 / 11:29