Se os nomes dos arquivos forem numerados sequencialmente, basta executar o seguinte comando:
rm fileName_{100..100000}
Eu tenho arquivos fileName_1 , fileName_2 ... fileName_100000 em que fileNames são numerados sequencialmente. Como posso excluir os arquivos de índice maiores que, digamos, 100 ?
Se os nomes dos arquivos forem numerados sequencialmente, basta executar o seguinte comando:
rm fileName_{100..100000}
Você também pode tentar este comando,
for i in $(seq 100 100000); do rm fileName_$i; done
Ele excluirá todos os arquivos (varia de 100 a 100.000) se o nome do arquivo contiver números em uma ordem seqüencial.
Em geral, você tem várias maneiras de conseguir isso:
rm fileName_{100..100000}
será expandido pelo shell em aproximadamente 100.000 nomes de arquivos. Se o nome da base for um caminho longo e o número for alto o suficiente, você poderá realmente exceder o comprimento máximo de uma linha de comando com essa abordagem.
O for
loop
for i in $(seq 100 100000); do rm fileName_$i; done
não sofre com este problema, mas é uma maneira relativamente lenta de deletar os arquivos, já que o shell tem que executar a substituição de variáveis e executar o rm cerca de 100.000 vezes.
Ambos os métodos acima podem causar avisos se alguns dos arquivos, digamos, filename_101
estiverem faltando.
Geralmente, as soluções baseadas em find
são melhores, pois funcionam apenas em arquivos que estão lá (durante a descoberta). No entanto, existem algumas diferenças sutis:
find . -name 'fileName_[100-100000]' -exec rm {} \;
ainda lançará o programa rm
cerca de 100.000 vezes, enquanto que a substituição da% final\;
por +
tentará minimizar o número de subprocessos. Ambos os métodos provavelmente serão (muito ou um pouco) mais lentos do que usar -delete
, que não usa comandos externos, mas invoca chamadas do sistema.
No entanto, sempre verifique primeiro se o padrão realmente corresponde aos arquivos que você deseja segmentar:
stefan@tuxedo ~ % mkdir askubuntu
stefan@tuxedo ~ % touch askubuntu/filename_{1..1000}
stefan@tuxedo ~ % find askubuntu -name 'filename_[100-1000]'
askubuntu/filename_1
Então, neste caso, você excluiria um arquivo que queria manter e deixaria os arquivos que deveriam ter sido removidos.
Use o seguinte comando:
find . -name 'fileName_[100-100000]' -exec rm {} \;
Isso excluirá arquivos de 100 a 100.000.
Mais informações: Site
Tags command-line