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 ...)
?
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 ...)
?
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.
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'.
J'utiliserais "ls -t", surtoût s'il s'agit juste d'afficher la liste des fichiers.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 ...)
?
ɹǝsn *sıɹɐlos*
Le but de la recupération est evidement de traiter les fichiers en attente par ordre d'arrivée.
C'est fait avec un
Nous sommes conscients des limites de la sortie du ls, les fichiers portent des noms 'normaux' et le resultat est la.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 for i in $( ls -1t [patern eventuel]* ) do ... $i ... done
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 :
et vous ?
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
"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 ...
affiche
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
Seul "aaaa\nbbbb" n'est pas traité correctement.
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]
ɹǝsn *sıɹɐlos*
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager