3 votes

Quel est l'ordre par défaut de "for f in directory/*" ?

Je voulais savoir si le fait d'itérer sur les fichiers d'un répertoire avec la commande

for f in directory/*

aura un certain ordre de traitement des entrées par défaut (nom du fichier, date de création, etc.), ou bien est-il non déterministe ?

C'est probablement évident, mais je n'ai pas trouvé l'information.

1voto

Will Points 1117

L'ordre sera un ordre lexicographique (ordre alphabétique). Ce sera exactement la même chose que ce que vous voyez si vous tapez ls directory/* à une invite Bash Shell.

Si vous voulez trier par temps de modification, vous pouvez utiliser ls -t . Véase man ls pour d'autres options de tri.

1voto

Louis Gerbarg Points 33025

directory/* est développé par le Shell en premier (normalement bash). Exécution de echo directory/* fera écho de tous les fichiers correspondants, et bash triera d'abord ces éléments correspondants lexicographiquement, avant de les passer comme arguments à echo qui les imprime ensuite.

Dans le cas de l'exécution ls directory/* le directory/* est d'abord développé par le Shell, et ensuite présenté comme une liste d'arguments à ls . L'ordre qui ls utilise ensuite pour sortir les fichiers dépend des arguments optionnels qui lui sont fournis, qui permettent de sortir la liste des fichiers sur la base de critères alternatifs, tels que la taille, l'heure de modification, etc. ls lui-même, après qu'on lui ait passé la liste d'arguments étendue triée lexicographiquement de la bash Shell.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X