Faço essa tarefa regularmente e uso variantes do seguinte. É um pipeline que combina várias ferramentas simples: encontre todos os arquivos, acrescente o tempo de modificação do arquivo, classifique, remova o tempo de modificação do arquivo, exiba todas as linhas, exceto as 500 primeiras, e remova-as:
find foo/ -type f | perl -wple 'printf "%12u ", (stat)[9]' | \
sort -r | cut -c14- | tail -n +501 | \
while read file; do rm -f -- "$file"; done
Alguns comentários:
Se você estiver usando o “bash”, você deve usar o “read -r file”, não apenas o “read file”.
Usar o "perl" para remover os arquivos é mais rápido (e também lida com caracteres "estranhos" nos nomes dos arquivos, melhor do que o loop while, a menos que você esteja usando o "read -r file"):
... | tail -n +501 | perl -wnle 'unlink() or warn "$_: unlink failed: $!\n"'
Algumas versões do "tail" não suportam a opção "-n", portanto você deve usar o "tail +501". Uma maneira portátil de pular as 500 primeiras linhas é
... | perl -wnle 'print if $. > 500' | ...
Não funcionará se os nomes dos seus arquivos contiverem novas linhas.
Não é necessário encontrar o GNU.
A combinação do acima exposto fornece:
find foo/ -type f | perl -wple 'printf "%12u ", (stat)[9]' | \
sort -r | cut -c14- | perl -wnle 'print if $. > 500' | \
perl -wnle 'unlink() or warn "$_: unlink failed: $!\n"'
rm -f
.É assim que eu faria no Python 3., que também deve funcionar para outros sistemas operacionais. Depois de testar isso, descomente a linha que realmente remove os arquivos.
fonte
Não conheço os "500 mais novos", mas, com o Find, você pode excluir itens com mais de X minutos / dias. Exemplo para arquivo e com mais de 2 dias:
Teste primeiro com:
Observe as barras invertidas e o espaço antes de "\;". Veja a página do manual find para mais informações.
fonte
se você poderia manter arquivos x dias / horas em vez do número x mais novo, poderia fazê-lo apenas com
tmpwatch --ctime 7d
fonte
Eu acho que o
-mtime
e-newer
opções defind
comando são úteis para você. Você pode verman find
para mais informações.fonte
por que não usar este código mais simples:
fonte