Alguém respondeu à pergunta e excluiu a resposta, mas usei a resposta que eles deram.
find /path -mtime +1000 -exec rm -rf {} \;
Isso excluiria arquivos com mais de 1000 dias.
Eu tenho um downloader em execução (em perl) que tenta executar um comando do sistema mv.
A saída do mv
mv: cannot move './PMC5318673/EXCLI-15-758.pdf' to '/directory/EXCLI-15-758.pdf': No space left on device
Há espaço na unidade, mas acredito que esta pasta tenha usado todos os seus inodes.
então a solução que criamos é excluir o arquivo mais antigo no diretório e tentar mover o arquivo para lá, e se ainda não houver espaço para fazer o mv, exclua o próximo arquivo mais antigo.
Eu preciso de um comando do sistema que seja rápido de executar. (ls leva uma eternidade, já que provavelmente há milhões de arquivos ou mais ??) que podem excluir o arquivo mais antigo. Além disso, parece que os arquivos podem estar em subpastas, às vezes.
Além disso, se você conseguir pensar em uma ideia diferente da de excluir os arquivos mais antigos, avise-nos.
No zsh:
rm **/*(.om[-1])
(ou de um shell diferente: zsh -c 'rm **/*(.om[-1])'
)
o que significa:
(...) é um qualificador do zsh glob
.
significa considerar apenas arquivos "simples" (não diretórios, etc.)
om
significa ordená-los por hora de modificação
-1
significa selecionar apenas o arquivo mais antigo
Agradecemos a a resposta de Gilles aqui para a inspiração
exclua o arquivo mais antigo
find . -name '*some-pattern*' -type f -printf '%T+ %p\n' | sort | head -n1 | awk '{print $2}' | xargs rm -v
a finalidade de -name '*some_pattern*'
aqui é restringir as correspondências apenas aos arquivos que você deseja excluir