Você pode reverter a ordem dos arquivos ( sort --reverse
) para que os arquivos mais recentes sempre sejam os primeiros em um bloco de arquivos com o mesmo prefixo. Então você pode acompanhar o bloco atual (com $current_prefix
) e manter o primeiro arquivo em cada bloco ( continue
) e rm
todos os outros arquivos no bloco:
current_prefix=
find . -name '???_*.txt' | sort --reverse | while read line; do
if [[ ${line[1,5]} != $current_prefix ]]; then
# we are at the beginning of a new block
current_prefix=${line[1,5]}
continue # actually not needed b/c there is nothing outside the if block.
else
rm -- $line
fi
done
Observação: para testar isso primeiro, você pode inserir todos os comandos rm
com echo
.
Para listar apenas os arquivos que você deseja manter, você pode usar sort
e uniq
:
find . -name '???_*.txt' | sort --reverse | uniq --check-chars 3