O comprimento máximo da linha de comando é o tamanho total em bytes, não o número de argumentos. Arquivos 40k com nomes no formato /imr_report_repo/*
significam um mínimo de 800kB, provavelmente mais. Isso está acima do limite.
A solução óbvia é fazer com que find
faça a recursão para você. Vá da profundidade 1 à profundidade 1 em vez da profundidade 0 à profundidade 0.
find /imr_report_repo/ -mindepth 1 -maxdepth 1 -type f -mtime +15 -delete
Ao contrário do original, isso inclui arquivos cujo nome começa com .
(arquivos de ponto). Se você não quiser, exclua-os:
find /imr_report_repo/ -mindepth 1 -maxdepth 1 -name '.*' -prune -o -type f -mtime +15 -delete
A maioria das implementações find
que têm -maxdepth
também têm -delete
. Se o seu não, não apenas canalize o resultado em while read
: é um pouco lento e quebra em nomes de arquivos contendo novas linhas (e barras invertidas e espaços em branco à direita porque você usou read
onde você should usou IFS= read -r
). Use -exec
, é para isso.
find /imr_report_repo/ -mindepth 1 -maxdepth 1 -type f -mtime +15 -exec rm -f {} +