Eu tenho os arquivos fileName_1 , fileName_2 ... fileName_100000 onde os fileNames são numerados seqüencialmente. Como posso excluir os arquivos do índice maiores que, digamos 100 ?
command-line
teaLeef
fonte
fonte
{x..y}
para a lista inteira. Por exemplo, se você usá-echo test{1..3}
lo, ele será expandidoecho test1 test2 test3
e executado. Como você pode ver, ele imprimetest1 test2 test3
. Da mesma forma, se{x..y}
não estiver conectado a nenhum argumento, ele apenas colocará os números lá. Por exemploecho test {1..3}
, apenas imprimirátest 1 2 3
.exec
chamada ao número de argumentos que um processo pode ter. Você pode recuperá-lo comgetconf ARG_MAX
. Por exemplo, no meu sistema, é2097152
(~ 2,1 milhões). Isso significa querm
(que não é um built-in) falhará com mais do que muitos arquivos. Os comandos internos não têm esse problema e as outras soluções propostas também não.Você pode tentar este comando também,
Ele excluirá todos os arquivos (varia de 100 a 100000) se o nome do arquivo contiver números em uma ordem sequencial.
fonte
Em geral, você tem várias maneiras de conseguir isso:
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
laçonão sofre com esse problema, mas é uma maneira relativamente lenta de excluir os arquivos, pois o shell precisa executar a substituição de variável e iniciar a rm cerca de 100.000 vezes.
Os dois métodos acima podem causar avisos se alguns dos arquivos, por exemplo,
filename_101
estiverem ausentes.Geralmente, as soluções baseadas
find
são melhores, pois funcionam apenas em arquivos que estão realmente lá (durante a descoberta). No entanto, existem algumas diferenças sutis:ainda lançará o
rm
programa cerca de 100.000 vezes, enquanto a substituiçã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 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 direcionar:
Portanto, nesse caso, você excluiria um arquivo que desejava manter e deixaria os arquivos que deveriam ter sido removidos.
fonte
Use o seguinte comando:
Isso excluirá arquivos de 100 a 100000.
Mais informações: Site
fonte
+
ao invés de\;
- veja aqui . Ou, melhor ainda, use o-delete
comando find .[100-100000]
classe de caracteres corresponde apenas um único personagem, por isso só pode corresponder 0 ou 1.