IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes POSIX Discussion :

traiter des fichiers par ordre de date


Sujet :

Shell et commandes POSIX

  1. #1
    Membre confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 247
    Points : 473
    Points
    473
    Billets dans le blog
    1
    Par défaut traiter des fichiers par ordre de date
    Bonjour,

    Je lis ici souvent qu'on ne doit pas traiter des listes de fichier à l'aide de ls .
    Comment feriez vous pour recuperer la liste de fichiers triés par date de derniere modif sans passer par ls -t ( avec ou sans r ...)
    ?

  2. #2
    Expert éminent sénior Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Points : 12 264
    Points
    12 264
    Par défaut
    le refus du tri dans le résultat de "ls" vient du fait que c'est une capture d'affichage et donc un traitement sur chaines de cratères ce qui est donc lent...
    concrètement, vu les perfs des disques/machines actuelles cette restriction est faible.

    Mais l'usage veux qu'on évite de le faire pour une autre raison beaucoup plus pertinente celle là. C'est que la sélection de fichier par la commande ls ou encore les droits même en lecture sur le répertoire à traiter peut influencer grandement le résultat, sans parler des limites d'affichage, ou encore des limites en nombre de fichiers par répertoires selon les files systèmes etc...

    On cherche donc généralement à trouver un traitement par lot, ou par exemple la commande find, qui associée à l'option exec, ou encore dans une boucle permettra la réalisation d'un traitement par fichier correspondant à la recherche, chaque traitement étant alors unitaire, le risque d'effets de bords indésirable tend vers zéro.

  3. #3
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Points : 7 882
    Points
    7 882
    Par défaut
    Citation Envoyé par Jean.Cri1 Voir le message
    Je lis ici souvent qu'on ne doit pas traiter des listes de fichier à l'aide de ls .
    Ce n'est pas une règle, juste un conseil, et qui n'est pas systématique. Ce qui arrive souvent, c'est qu'une commande utilise 'ls' alors que ce n'est pas nécessaire. Le fait d'utiliser 'ls' peut entrainer des erreurs si les noms de fichiers contiennent des espaces et autres caractères spéciaux.
    Comme l'a déjà dit frp31, 'find' est en général plus approprié car il permet de traiter n'importe quel nom de fichier dans la directive '-exec'.
    Comment feriez vous pour recuperer la liste de fichiers triés par date de derniere modif sans passer par ls -t ( avec ou sans r ...)
    ?
    J'utiliserais "ls -t", surtoût s'il s'agit juste d'afficher la liste des fichiers.
    ɹǝsn *sıɹɐlos*

  4. #4
    Membre confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 247
    Points : 473
    Points
    473
    Billets dans le blog
    1
    Par défaut
    Le but de la recupération est evidement de traiter les fichiers en attente par ordre d'arrivée.
    C'est fait avec un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for i in $( ls -1t [patern eventuel]* )
    do
    ... $i ...
    done
    Nous sommes conscients des limites de la sortie du ls, les fichiers portent des noms 'normaux' et le resultat est la.

    C'est juste un cas d'école que je soumets pour trouver des solutions "propres" pour tous.

    Personnellement je ne vois pas comment faire autrement,
    tout ce que je peux proposer c'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ls -1t [patern eventuel]* | while read i
    do
    ... "$i" ... #pour les noms bizzares sauf ceux qui contiendraient eux meme ' " '
    done
    et vous ?

  5. #5
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Points : 7 882
    Points
    7 882
    Par défaut
    "ls -t" suffit, le -1 est redondant ici.

    Ton deuxième exemple gère la plupart des noms de fichiers tordus, y compris ceux qui ont des guillemets anglais " dans leur nom. Le seul cas que je vois qui ne passerait sont les fichiers qui on une fin de ligne dans leur nom, mais c'est plutôt rare ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    rm -rf /tmp/testls
    mkdir /tmp/testls
    cd /tmp/testls
    touch a b "aa bb" "$(printf "aaa\tbbb")" "$(printf "aaaa\nbbbb")" "aaaaa\"bbbbb"
    ls -l
    ls -t | while read i
    do
        echo "[$i]"
    done
    affiche

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    total 0
    -rw-r--r-- 1 jlliagre jlliagre 0 2011-12-20 11:21 a
    -rw-r--r-- 1 jlliagre jlliagre 0 2011-12-20 11:21 aaaaa"bbbbb
    -rw-r--r-- 1 jlliagre jlliagre 0 2011-12-20 11:21 aaaa?bbbb
    -rw-r--r-- 1 jlliagre jlliagre 0 2011-12-20 11:21 aaa?bbb
    -rw-r--r-- 1 jlliagre jlliagre 0 2011-12-20 11:21 aa bb
    -rw-r--r-- 1 jlliagre jlliagre 0 2011-12-20 11:21 b
     
    [a]
    [aaaaa"bbbbb]
    [aaaa]
    [bbbb]
    [aaa	bbb]
    [aa bb]
    [b]
    Seul "aaaa\nbbbb" n'est pas traité correctement.
    ɹǝsn *sıɹɐlos*

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Mettre dans l'ordre des fichiers par date de modification
    Par ftrap dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 21/07/2012, 00h15
  2. Fusionner des fichiers par ordre de date décroissant
    Par rvaysse dans le forum Windows
    Réponses: 4
    Dernier message: 29/12/2010, 16h20
  3. Ouvrir des fichiers par ordre alphabétique
    Par gegadin dans le forum Général VBA
    Réponses: 2
    Dernier message: 17/09/2008, 17h25
  4. Sélection des fichiers par date
    Par bramy dans le forum Linux
    Réponses: 1
    Dernier message: 06/12/2006, 19h10
  5. Classer des fichiers par date
    Par lorentdups dans le forum Langage
    Réponses: 3
    Dernier message: 01/10/2006, 17h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo