Aqui está uma forma mais robusta que manipula corretamente espaços (ou até mesmo novas linhas) em nomes de arquivos e diretórios.
find . -type f -name '*.[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9].qz' -exec sh -c 'fdate="${1%.qz}"; fdate="${fdate##*.}"; [ "$fdate" "<" "$(date +%F -d "7 days ago")" ] && rm "$1"' find-sh {} \;
Isso envolve muitos truques que podem parecer estranhos para algumas pessoas, então vamos dividi-lo:
Começando no diretório atual, encontre recursivamente todos os arquivos regulares ...
find . -type f
... cujos nomes terminam no padrão exato ".YYYY-MM-DD.qz" ...
-name '*.[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9].qz'
... então, execute um comando shell em cada arquivo correspondente (observe as aspas simples) ...
-exec sh -c '
... que primeiro retira o ".qz" ...
fdate="${1%.qz}";
... então retira a parte extra inicial, deixando apenas "AAAA-MM-DD" ...
fdate="${fdate##*.}";
... e compara essa string para ver se ela é ordenada (lexicamente) antes de "AAAA-MM-DD" da data de sete dias atrás ...
[ "$fdate" "<" "$(date +%F -d "7 days ago")" ]
... e, em caso afirmativo, remove o arquivo ...
&& rm "$1"'
... e usaremos "find-sh" como o "nome do script" (por exemplo, $0
) a ser usado no relatório de erros ...
find-sh
... e defina o nome do arquivo encontrado por find
para o parâmetro um ( $1
) do script de shell in-line.
{} \;