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.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Jean-Francois Billaud
Le #25475162
On 12/06/2013 05:02, Christophe PEREZ écrivait:

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.



ls -lt

JFB

--
Vous avez du nouveau courrier dans /dev/urandom
Nicolas George
Le #25475362
Jean-Francois Billaud , dans le message
ls -lt



La sortie de ls n'est pas faite pour être lue par un script. Celle de ls -l
encore moins.
Nicolas George
Le #25475352
Christophe PEREZ , dans le message écrit :
Je cherche depuis un petit moment le moyen de trouver, en bash, le
fichier le plus récent parmi une liste de fichiers.



Avec zsh : *(.om[1])

(tu peux évidemment mettre n'importe quel motif à la place de *)
Marc Boyer
Le #25476182
Le 12-06-2013, 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



ls -t rep.*/sousrep/fichier | head -n 1

Marc Boyer
--
À mesure que les inégalités regressent, les attentes se renforcent.
François Dubet
Christophe PEREZ
Le #25476222
Le Wed, 12 Jun 2013 12:15:41 +0000, Marc Boyer a écrit :

ls -t rep.*/sousrep/fichier | head -n 1



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 ?
Tonton Th
Le #25476552
On 2013-06-12, Christophe PEREZ
Une autre idée ?



Peut-être find avec le -cnewer ?

--
http://foo.bar.quux.over-blog.com/article-anisette-118361455.html
Christophe PEREZ
Le #25477212
Le Wed, 12 Jun 2013 15:41:28 +0000, Tonton Th a écrit :

Peut-être find avec le -cnewer ?



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.
Benoit Izac
Le #25477372
Bonjour,

le 12/06/2013 à 05:02, Christophe PEREZ a écrit dans le message

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".



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
Christophe PEREZ
Le #25477912
Le Wed, 12 Jun 2013 22:08:47 +0200, Benoit Izac a écrit :

Avec le GNU find :
find . -type f -name fichier -printf '%T@ %pn'
| sort -rn | sed -e 's/^[^ ]* //;q'



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.
Lucas Levrel
Le #25482832
Le 12 juin 2013, Christophe PEREZ a écrit :

Le Wed, 12 Jun 2013 12:15:41 +0000, Marc Boyer a écrit :

ls -t rep.*/sousrep/fichier | head -n 1



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



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
Publicité
Poster une réponse
Anonyme