Excluindo arquivos no Linux com um loop usando o `rm`

0

Eu tenho arquivos como file.log.1.gz, file.log.2.gzfile.log.100.gz. Eu quero ter um loop de 1 para 100 para excluir esses arquivos. Como isso pode ser feito?

Eu tentei este comando no Linux:

for i in $(seq 1 100); do rm -rf file.log.$i.gz
Asa
fonte
O que aconteceu quando você tentou esse comando?
David Z
Devo copiar esse comando, colar no terminal e executar .... hmm ... pensa .... não, obrigado, rm é o comando do diabo: verifique se você tem certeza do que ele fará ...
Solar Mike
Por que não apenas remover a pasta que contém esses arquivos e depois substituí-la? Trabalhou um tratamento para remover 180000 arquivos em várias pastas no passado ....
Solar Mike
Porque eu preciso dessa pasta, eu tenho 50 + arquivos lá que eu preciso, então eu não posso simplesmente excluí-lo. O comando que eu uso está no bash e não faz nada, embora eu saiba que: para i em $ (seq 1 100), é um loop no bash
Asa
Embora sua solução seq faça isso, se for para manutenção de arquivo de log e você quiser se livrar de logs antigos, execute algo como 'find / caminho / para / dir -tipo f -ctime + XXX -exec rm {} + `onde XXX é o número de dias que você deseja manter. Você pode querer substituir rm com echo pela primeira vez para verificar se faz o que deseja. Você pode adicionar este arquivo para executar periodicamente no cron para fazer isso automaticamente.
davidgo

Respostas:

2

Seu done está desaparecido.

for i in $(seq 1 100); do rm -f file.log.$i.gz; done

Eu removi -r porque a recursão é inútil quando o argumento é um arquivo.


Essa sintaxe sem loop também deve funcionar bash. Alimenta todos os nomes para um único rm:

rm file.log.{1..100}.gz
Kamil Maciorowski
fonte