deletar o arquivo mais antigo no diretório

1

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.

    
por yankel 02.04.2017 / 10:39

3 respostas

0

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.

    
por 05.04.2017 / 10:16
1

No zsh:

rm  **/*(.om[-1])

(ou de um shell diferente: zsh -c 'rm **/*(.om[-1])' )

o que significa:

  1. **/* reúne arquivos recursivamente

  2. (...) é um qualificador do zsh glob

  3. . significa considerar apenas arquivos "simples" (não diretórios, etc.)

  4. om significa ordená-los por hora de modificação

  5. -1 significa selecionar apenas o arquivo mais antigo

Agradecemos a a resposta de Gilles aqui para a inspiração

    
por 02.04.2017 / 14:27
0

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

    
por 02.04.2017 / 11:16

Tags