Qual é a ordem padrão de “for f in directory / *”? [duplicado]

2

Eu queria saber se iterar sobre arquivos no diretório

for f in directory/*

terá alguma ordem padrão de entradas de processamento (nome do arquivo, data de criação, etc.?), ou é não-determinístico?

É provavelmente óbvio, mas não consegui encontrar a informação.

    
por Pigsty 02.02.2016 / 11:10

2 respostas

1

O pedido será em ordem lexicográfica (ordem alfabética). Será exatamente o mesmo que você vê se digitar ls directory/* em um prompt do shell Bash.

Se você quiser classificar por hora de modificação, use ls -t . Veja man ls para outras opções de classificação.

    
por 02.02.2016 / 11:23
1

directory/* é expandido pela primeira shell (normalmente bash). A execução de echo directory/* fará eco de todos os arquivos correspondentes e o bash classificará primeiro esses elementos lexicograficamente, antes de passá-los como argumentos para echo , que então os imprime.

No caso de executar ls directory/* , o directory/* é primeiro expandido pelo shell e, em seguida, é apresentado como uma lista de argumentos para ls . A ordenação que o ls utiliza para produzir os arquivos depende dos argumentos opcionais fornecidos a ele, que permitem a saída da lista de arquivos com base em critérios alternativos, como tamanho, tempo modificado, etc., mas essa classificação é feita internamente no ls binário em si, depois de ter passado a lista de argumentos expandidos lexicograficamente ordenados do shell bash.

    
por 02.02.2016 / 13:22

Tags