Apaga vários nomes de arquivos seqüenciais, mas ignora parte do primeiro

1

Às vezes, meus scripts ficam presos em loops infinitos. Quando o loop cria novos arquivos, as coisas ficam confusas.

Atualmente, tenho este formato de nome de arquivo:

Task.4883.store.log

onde 4883 é um contador.

Eu preciso excluir todos os arquivos, exceto os 10 primeiros (ou seja, contador em 0-9, inclusive). Atualmente, cerca de 10k arquivos são criados antes que eu possa reagir e parar o script. SSDs são muito rápidos.

Fica um pouco mais difícil por rm não aceitar muitos argumentos: -bash: /bin/rm: Argument list too long

Ah, e estou atualmente em um mac.

    
por Filip Haglund 21.06.2015 / 21:06

3 respostas

3
find . -name 'Task.??*.store.log' | xargs rm -f
    
por 21.06.2015 / 21:23
5

Um POSIX um, pode manipular arquivos que contêm nova linha no nome do arquivo:

find . -name 'Task.??*.store.log' -exec rm -f {} +
    
por 22.06.2015 / 03:16
2

com zsh :

rm Task.<10->.store.log 

Para evitar que a lista de argumentos seja longa :

autoload zargs # best in ~/.zshrc 
zargs Task.<10->.store.log -- rm
    
por 22.06.2015 / 08:18