Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

liste fichiers mais sans repertoires

15 réponses
Avatar
pika
Bonjour
Quand j'utilise os.path.walk, la liste de repertoires
qu'il me donne est ok mais la liste de fichiers contient
aussi les repertoires, comment faire pour avoir rien que des fichiers
à part tester ceux ci un par un ?

5 réponses

1 2
Avatar
Florent Manens
Bonjour,

Le 10-12-2005, Do Re Mi chel La Si Do a écrit :
Quelques petites précisions :

Concernant les disques durs, il y a de multiples niveaux de caches. Celui de
Windows en est un. Mais on oublie souvent celui du contrôleur du disque dur
(souvent 2, 4 ou 8 Mo).


Merci d'ajouter cette précision, on remarquera cependant qu'elle n'a pas
d'influence sur le temps de os.walk dans les chiffres que j'ai donné.

Et, quand on parle du cache de windows, il faudrait distinguer : le cache
d'accès aux fichiers, le cache de lancement des programmes (cache externe,
avec prefetch), le cache de DLL (interne, et externe avec DLLcache),


En réalité, pour le cache windows, je ne pensais pas au cache des DLL mais
à l'indexation des fichiers sur windows XP.

Jouent également : le type de système de fichiers/formatage (NTFS est plus
lent, gestion des derniers accès ou non) ; les antivirus (certains ne
rescanne pas un fichier accédé qq secondes auparavant, d'autres oui) et de
leur configuration ; de certains paramètres de windows (indexation lancée /
pas lancée / désactivée, pour le service et pour le disque).


Voilà, ça recadre bien le contexte.

Il y a encore d'autres éléments.

Il résulte de tout ça que, pour tester la vitesse d'une façon de faire, il
faut faire tourner deux fois, de suite, chaque méthode ; pour diminuer
l'impact des caches. Mais, surtout, IL FAUT ETEINDRE ET REDEMARRER
L'ORDINATEUR ENTRE CHAQUE CHANGEMENT DE METHODE. Un reboot simple ne suffit
pas toujours.


+1, mais j'avoue que j'ai eu la flemme de redémarer, ce que j'avais
trouvé me semblait suffisant. Si jamais une personne a le temps de le
faire, je serais heureux de voir les résultats !

Un autre critère, jouant sur la vitesse, peut être trouvé dans les critères
de sélection des fichiers. Par exemple, si je veux tous les fichiers images
(Jpeg) commençant par ARD, j'utilise : DIR ard*.jpg /S /B alors que les
différents walk nécessitent plus de code, avec un temps d'exécution rallongé
d'autant.


Oui et non car le "FindFilesIterator" peut reçevoir une expression du type
"ard*.jpg" en paramètre.

Autre chose : le fait de ne pas obtenir la même chose, entre différentes
méthodes laisse penser à un manque de cohérence, entre les modes de
recherche. En clair, certains paramètres sont mal positionnés. Par exemple,
sur un disque, j'ai plus d'un million de fichiers. Et j'obtiens exactement
la même chose, avec les trois méthodes, sauf si j'examine les répertoires
systèmes, dont le contenu de certains change en continu (surtout à cause des
fichiers temporaires).


J'ai fais les testes sur un disque système, ça peut effectivement
expliquer les différences de nombre de fichiers trouvés. Si un jour j'ai
plus d'informations à ce sujet, je pourrai revenir faire un point.

Quand aux accents, je suppose qu'il s'agit d'un mauvais choix du code-page
(850 par défaut pour XP), et/ou de police. Car, sur mes configs, non
seulement DIR gère correctement les accents, mais il traite sans problème
des fichiers avec des noms Unicode (plus précisément en cyrillique).
(Éventuellement CMD /U permet de forcer le travail en unicode).


En réalité, je parle des fichiers dont le nom ne s'affiche pas
correctement dans l'explorateur sous windows (on a un carré à la place
du caractère accentué correspondant). ça n'est donc ni du CP 850, ni du
cyrillique. CMD les listes bien mais je ne peux pas ouvrir le fichier
ensuite avec un file(monfichier, "r") (fichier introuvable).
Je n'ai pas encore pu tester le cmd /U.

Merci pour ton message Michel mais, si je peux me permettre une
remarque, tes messages seraient plus facile à lire si tu citais le
contexte de la conversation.

Cordialement

--
Florent Manens


Avatar
Do Re Mi chel La Si Do
Salut !


Comme par hasard, je tombe, chez un client, sur un problème qui concerne (un
peu) la discussion.

Il s'agit de faire des copies différentielles de certains répertoires, de
plusieurs postes, vers des répertoires réseau. En gros, une vingtaine de
répertoires par postes, pour une trentaine de postes.

Donc, j'ai fait tout ça avec ROBOCOPY (un puissant utilitaire gratuit, de
microsoft, fournit avec les kits de ressources techniques de windows).

Tant que c'était tout windows, cela a bien fonctionné. Mais, un jour, le
client a acheté un serveur NAS, qui fonctionne avec une sorte de linux
embarqué.

Dès ce moment, toutes les copies sont devenues systématiques, au lieu d'être
différentielles. Résultat : une à deux heures de copie par jour, et par
poste, au lieu de quelques minutes.

Après moult recherches, il s'est avéré que le problème venait de la façon
dont ce linux gère les dates des fichiers. Sous windows (XP, 2000, S2003),
il y a 3 dates : création, dernière modif/écriture, dernier accès. Or, la
version de linux utilisée ne travaille pas de la même façon que windows (par
exemple, la date de création est refaite, au lieu d'être copiée).
Et, cela n'était pas visible avec un simple DIR. Il fallait utiliser les
commutateurs /TA /TC /TW pour le voir.

Bref, grâce à Python (walk & stat), j'ai réglé le problème.


Comme quoi, aucune solution n'est jamais définitivement valide.


Le pire, c'est que, chez un autre client, qui a aussi un serveur NAS, avec
un linux inconnu, il n'y a pas de problème.
En conclusion, tous les linux ne se comportent pas de la même façon.



@-salutations

Michel Claveau
Avatar
jean-michel bain-cornu
Bonjour,

Do Re Mi chel La Si Do wrote:
Salut !


Comme par hasard, je tombe, chez un client, sur un problème qui concerne (un
peu) la discussion.

Il s'agit de faire des copies différentielles de certains répertoires, de
plusieurs postes, vers des répertoires réseau. En gros, une vingtaine de
répertoires par postes, pour une trentaine de postes.

Donc, j'ai fait tout ça avec ROBOCOPY (un puissant utilitaire gratuit, de
microsoft, fournit avec les kits de ressources techniques de windows).
En open source, il y a Unison qui est pas mal.


Tant que c'était tout windows, cela a bien fonctionné. Mais, un jour, le
client a acheté un serveur NAS, qui fonctionne avec une sorte de linux
embarqué.

Dès ce moment, toutes les copies sont devenues systématiques, au lieu d'être
différentielles. Résultat : une à deux heures de copie par jour, et par
poste, au lieu de quelques minutes.

Après moult recherches, il s'est avéré que le problème venait de la façon
dont ce linux gère les dates des fichiers. Sous windows (XP, 2000, S2003),
il y a 3 dates : création, dernière modif/écriture, dernier accès. Or, la
version de linux utilisée ne travaille pas de la même façon que windows (par
exemple, la date de création est refaite, au lieu d'être copiée).
Etrange, n'est-ce pas le process client qui décide de la date de

création du fichier ?
Et, cela n'était pas visible avec un simple DIR. Il fallait utiliser les
commutateurs /TA /TC /TW pour le voir.

Bref, grâce à Python (walk & stat), j'ai réglé le problème.


Comme quoi, aucune solution n'est jamais définitivement valide.


Le pire, c'est que, chez un autre client, qui a aussi un serveur NAS, avec
un linux inconnu, il n'y a pas de problème.
En conclusion, tous les linux ne se comportent pas de la même façon.
Il s'agit probablement plutôt de samba, composant gérant l'émulation de

serveur de fichiers Windows sous Linux.
Samba possède une grande quantité de paramètres qui lui permettent de
s'annoncer comme un serveur Windows de n'importe quelle version (je
crois qu'on peut remonter jusqu'à la 3.0 16 bits). On peut régler son
comportement d'une façon très fine, et certains fournisseurs en abusent,
d'où parfois des problèmes.
On constate aussi fréquemment qu'une nouvelle version de Windows ne
fonctionne pas bien avec les versions en cours de samba, avec des
symptômes du genre de celui qui est décrit ici par exemple. Même si l'on
est positif, on en déduit au minimum que MS ne fait pas grand chose pour
assurer l'interopérabilité (y compris d'ailleurs avec les serveurs
Windows anciennes versions...), et si l'on est parano, on peut aller
jusqu'à penser que c'est fait exprès...
Pour info, et si ma mémoire est bonne, le paramétrage de samba se fait
sur le port http:901 avec une chouette interface html, ou on peut régler
tout ce bazar.
Et bien sûr, si l'on est en linux natif, l'upgrade du serveur prend
quelque minutes, arrêt/redémarrage du serveur samba compris.
A+
jm



@-salutations

Michel Claveau





Avatar
Laurent Pointal
Do Re Mi chel La Si Do wrote:
[zip]

Après moult recherches, il s'est avéré que le problème venait de la façon
dont ce linux gère les dates des fichiers. Sous windows (XP, 2000, S2003),
il y a 3 dates : création, dernière modif/écriture, dernier accès. Or, la
version de linux utilisée ne travaille pas de la même façon que windows (par
exemple, la date de création est refaite, au lieu d'être copiée).
Et, cela n'était pas visible avec un simple DIR. Il fallait utiliser les
commutateurs /TA /TC /TW pour le voir.


J'ai déjà vu passer qq chose concernant des problèmes du même genre,
concernant rsync, où la conclusion était qu'il fallait lui donner un
paramètre de fenêtre de temps car la précision utilisée pour dater les
fichiers entre Linux et Windows n'était pas la même.

Au cas où...

A+

Laurent.

Avatar
Sébastien Kirche
Le 15 décembre 2005 à 15:12, Laurent Pointal vraute :

Do Re Mi chel La Si Do wrote:
[zip]

Après moult recherches, il s'est avéré que le problème venait de la
façon dont ce linux gère les dates des fichiers. Sous windows (XP,
2000, S2003), il y a 3 dates : création, dernière modif/écriture,
dernier accès. Or, la version de linux utilisée ne travaille pas de
la même façon que windows (par exemple, la date de création est
refaite, au lieu d'être copiée). Et, cela n'était pas visible avec
un simple DIR. Il fallait utiliser les commutateurs /TA /TC /TW pour
le voir.


J'ai déjà vu passer qq chose concernant des problèmes du même genre,
concernant rsync, où la conclusion était qu'il fallait lui donner un
paramètre de fenêtre de temps car la précision utilisée pour dater les
fichiers entre Linux et Windows n'était pas la même.


En ce qui concerne Linux, le problème est ailleurs : il n'y a tout
simplement pas de date de *création* (avec les filesystems courants)
mais une date de dernière *modification* ce qui explique qu'elle change
en cas de recopie.

Si le fichier n'a pas été modifié depuis sa création, les dates
coïncident à peu près si la création n'a pas duré, mais ensuite
l'information est perdue à la première modif.

--
Sébastien Kirche


1 2