Se você não puder saber que apenas um arquivo por dia é gerado (seu comando com falha funcionaria nesse caso), será necessário enviar a saída de find
na qual você tem uma combinação do carimbo de data e hora de o arquivo e o nome de arquivo em sort
e, em seguida, excluir a linha final com sed
antes de dividir o carimbo de data / hora (novamente com sed
) e alimentar os nomes resultantes em xargs -0 rm
:
find . -type f -name "dbf*" -printf "%T@:%pfind . -type f -name "dbf*" -printf "%T@:%p%pre%" | sort -z | sed -z '$d' | \
sed -z 's/[0-9\.]*://' | xargs -0 rm
" | sort -z | sed -z '$d' | \
sed -z 's/[0-9\.]*://' | xargs -0 rm
Como os nomes dos arquivos começarão com ./
, o segundo sed
corresponderá apenas ao primeiro ':', mesmo que a correspondência seja gulosa ( -printf "%T@:%p"
fornece algo como 1424765805.0206990940:./dbf_xyz
)
Isso deve funcionar com nomes de arquivos com espaços e novas linhas também, porque toda a cadeia está usando "linhas" terminadas em NUL