Excluindo arquivos específicos na linha de comando

Excluindo arquivos específicos na linha de comando

eu tenho arquivosnome do arquivo_1,nome do arquivo_2...nome do arquivo_100000onde os fileNames são numerados sequencialmente. Como posso excluir os arquivos de índice maior que, digamos100?

Responder1

Se os nomes dos arquivos forem numerados sequencialmente, basta executar o seguinte comando:

rm fileName_{100..100000}

Responder2

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 ordem sequencial.

Responder3

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 base for um caminho longo e o número for alto o suficiente, você poderá exceder o comprimento máximo de uma linha de comando com esta abordagem.

O forlaço

for i in $(seq 100 100000); do rm fileName_$i; done

não sofre deste problema, mas é uma forma relativamente lenta de deletar os arquivos, já que o shell tem que realizar a substituição de variáveis ​​e lançar o rm cerca de 100.000 vezes.

Ambos os métodos acima podem causar avisos se alguns dos arquivos, por exemplo, filename_101estiverem faltando.

Normalmente, as soluções baseadas em findsão melhores, pois funcionam apenas em arquivos que realmente estão lá (durante a descoberta). No entanto, existem algumas diferenças sutis:

find . -name 'fileName_[100-100000]' -exec rm {} \;

ainda iniciará o rmprograma cerca de 100.000 vezes, enquanto substituirá o final \;por +tentará minimizar o número de subprocessos. Ambos os métodos provavelmente serão (muito ou um pouco) mais lentos do que using, -deleteque não usa comandos externos, mas invoca chamadas do sistema.

No entanto,sempreverifique primeiro se o padrão realmente corresponde aos arquivos que você deseja atingir:

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.

Responder4

Use o seguinte comando:

find . -name 'fileName_[100-100000]' -exec rm {} \;

Isso excluirá arquivos de 100 a 100.000 .

Mais Informações:Site

informação relacionada