Comment puis-je lire les fichiers d'un répertoire dans l'ordre de tri?
Quand j'ai lu un répertoire en Perl, avec opendir
, readdir
, et closedir
, le readdir
fonction ne semble pas lire les fichiers dans un ordre particulier (que je peux dire).
Je suis de la lecture d'un répertoire qui a des sous-répertoires nommés par époque timestamp:
1224161460
1228324260
1229698140
Je veux lire dans ces répertoires dans l'ordre numérique, de ce qui mettrait le plus ancien d'abord de répertoires.
Lorsque j'utilise readdir
, le premier qu'il lit est 1228324260, qui est celui du milieu. Je sais que je pourrais mettre le contenu d'un répertoire dans un tableau pour trier le tableau, mais est-il une option que je peux passer à readdir
à lire dans l'ordre de tri? Ou peut-être une façon plus élégante de l'accomplissement de ce que de pousser le tout dans le tableau de tri et de la matrice? Il y a probablement de modules pour ce faire trop, mais il est difficile d'obtenir les modules installés dans notre environnement, donc à moins que c'est un module intégré, je préfère ne pas utiliser les modules...
Merci!
MODIFIER
Comme demandé, je vous poste le code que j'utilise:
opendir( my $data_dh, $data_dir ) or die "Cannot open $data_dir\n";
while ( my $name = readdir($data_dh) ) {
next if ( $name eq '.' or $name eq '..' );
my $full_path = "${data_dir}/${name}";
next unless ( -d $full_path );
process_dir($full_path);
}
closedir($data_dh);
Je sais que c'est un simple script, mais vous pouvez poster votre code afin de ne pas avoir à le reproduire?
Le & signe avant process_dir n'est pas nécessaire, et peut dans certains cas être préjudiciable. Je vous conseille de l'enlever.
Vous ne devez pas faire de la "méthode() || die"; le " ou " exploitant est ce que vous voulez, quand vous faites de la chaîne d'appels de méthode ensemble. Par exemple, les "fonctions opendir() or die "Impossible d'ouvrir"
Merci Robert - je commencer à utiliser le "ou" à la place
OriginalL'auteur BrianH | 2009-01-12
Vous devez vous connecter pour publier un commentaire.
readdir peut être appelé dans le tableau contexte, donc il suffit de faire ceci:
NON, la valeur par défaut ne suffit PAS. La valeur par défaut sortes lexicalement, pas numériquement. Les horodatages précédent 2001-09-09T01:46:40 permettrait de sorte que plus tard que la plupart des horodateurs après, car il a cassé le plus 1 000 000 000 secondes de la barrière.
Vraiment bien, les fonctions opendir est exagéré ici. Votre meilleur pari serait d'utiliser glob() ... pas de dossier poignées de s'inquiéter.
Avec
glob
, vous allez obtenir des noms complets (sauf$data_dir
se trouve être aussi une racine). Cela signifie que l'on appel supplémentairebasename
ouchdir
. Que ce dernier pourrait être un problème dans le temps.Mais alors
readdir
peut-être de mauvaises ainsi, c'est à dire pour le fichier de tests-X
que vous lâche parcours.OriginalL'auteur Andrew Barnett
Vous pouvez essayer avec un peu de Glob magie, glob apparaît à la fonction triés manière, afin que ce:
ou
devrait fonctionner. Juste être prudent avec glob, parce que c':
fait quelque chose de semi-magique, et imprime le dir contenu deux fois sur chaque ligne. c'est à dire:
OriginalL'auteur Kent Fredric
Il suffit de jeter un
sort
en face de la liste de l'opérateur que vous souhaitez commander à nouveau. Vous n'avez pas besoin de stocker les résultats dans un tableau. Vous pouvez utiliser unforeach
:Ah, oui, le pré blocs n'aime pas les crochets, même si il sort bien dans l'aperçu.
OriginalL'auteur brian d foy