bash fichier le plus r
Le
Christophe PEREZ

Salut,
Je cherche depuis un petit moment le moyen de trouver, en bash, le
fichier le plus récent parmi une liste de fichiers.
Je suppose qu'avec une boucle récursive, en les comparant deux à deux,
j'y parviendrai, mais ça me semble super lourd, et je me dis qu'il y a
probablement plus simple, mais je ne trouve pas.
Si cela peut vous aider à m'aider, ces fichiers ont le même nom, et se
trouvent dans une arborescence similaire que matche une expression du
genre
rep.*/sousrep/fichier
Je ne connais pas par avance la correspondance de * (jusqu'à maintenant
ce sont des nombres à 4 chiffres, mais aucune garantie que ça ne change
pas), ni le nombre d'occurrences de "fichier".
Merci d'avance à ceux qui se pencheront sur la question.
Je cherche depuis un petit moment le moyen de trouver, en bash, le
fichier le plus récent parmi une liste de fichiers.
Je suppose qu'avec une boucle récursive, en les comparant deux à deux,
j'y parviendrai, mais ça me semble super lourd, et je me dis qu'il y a
probablement plus simple, mais je ne trouve pas.
Si cela peut vous aider à m'aider, ces fichiers ont le même nom, et se
trouvent dans une arborescence similaire que matche une expression du
genre
rep.*/sousrep/fichier
Je ne connais pas par avance la correspondance de * (jusqu'à maintenant
ce sont des nombres à 4 chiffres, mais aucune garantie que ça ne change
pas), ni le nombre d'occurrences de "fichier".
Merci d'avance à ceux qui se pencheront sur la question.
ls -lt
JFB
--
Vous avez du nouveau courrier dans /dev/urandom
La sortie de ls n'est pas faite pour être lue par un script. Celle de ls -l
encore moins.
Avec zsh : *(.om[1])
(tu peux évidemment mettre n'importe quel motif à la place de *)
ls -t rep.*/sousrep/fichier | head -n 1
Marc Boyer
--
À mesure que les inégalités regressent, les attentes se renforcent.
François Dubet
Vous êtes gentil tous les 2 à me proposer la même solution, mais c'est
bien la première que j'ai essayé, et qui ne fonctionne pas pour des
fichiers dans des arborescences différentes. Après relecture du man,
j'avais bien compris que le -t triait les fichiers *d'un répertoire*, par
date.
Bref, le classement n'est pas bon :
ls -lt ../../users/Public/Application Data/Battle.net/Agent/Agent.*/
Agent.exe
-rwxr-xr-x 1 chris users 5845624 22 mai 01:37 ../../users/Public/
Application Data/Battle.net/Agent/Agent.1040/Agent.exe
-rwxr-xr-x 1 chris users 6065712 1 avril 20:28 ../../users/Public/
Application Data/Battle.net/Agent/Agent.1737/Agent.exe
Une autre idée ?
Peut-être find avec le -cnewer ?
--
http://foo.bar.quux.over-blog.com/article-anisette-118361455.html
J'y ai bien pensé, ou à -newer tout simplement, mais ça m'impose une
comparaison des fichiers 2 par 2 non ? Puisque cnewer attend un fichier
pour comparaison de date...
C'est ce dont je parlais dans mon premier post, et que je trouve super
lourd.
le 12/06/2013 à 05:02, Christophe PEREZ a écrit dans le message
Avec le GNU find :
find . -type f -name fichier -printf '%T@ %pn'
| sort -rn | sed -e 's/^[^ ]* //;q'
Voir aussi les options -maxdepth et -mindepth si nécessaire.
--
Benoit Izac
Merci pour cette ligne qui elle (aussi) fonctionne.
Je vais paraitre con (mais bon, ça ne sera ni la première ni la dernière
fois) mon problème n'est pas du tout là en fait, c'est mon analyse des
résultats qui est fausse. Il faut que je revois tout ça.
Milles excuses.
ls -t met le plus récent d'abord (d'où le head de Marc), c'est bien ce que
tu constates.
Ici c'est le shell qui remplace le motif par la liste de fichiers, donc ls
en quelque sorte ne voit pas les répertoires. Du moins, chez moi ça
marche.
--
LL