Fichier le plus recent (le retour)

Résolu/Fermé
Utilisateur anonyme - 4 févr. 2009 à 11:37
 Utilisateur anonyme - 5 févr. 2009 à 10:51
Bonjour,


Je suis sur la quete de la fonction ultime qui permetterai de trouver le dernier fichier modifié dans une arborecence composer de multiples dossiers.

Pour le moment, a mon moulin, j'ai trouvé ces grains de blé :

find . -depth -follow -print -exec stat -c %Y {} \; | sort -nr -k 2 | head -1

c'est pas mal, le problème c'est qu'il ne me sort pas le dernier fichier modifié

J'ai aussi ça :

find . -type f -print | xargs ls -rdt | tail -1

qui n'est pas mal du tout, mais seulement, il me retourne de multiples erreurs ls lorsque le fichier analysé est un fichier, justement.

Vraiment c'est tout près du but...

Voyez vous le moyen de parvenir à ce but ?
A voir également:

4 réponses

jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
4 févr. 2009 à 20:22
Salut,

sort -nr -k 2
Pourquoi "-k 2" ???

"sort -rn" suffit, non ?
0
Utilisateur anonyme
5 févr. 2009 à 09:59
Salut jipicy

le petit soucis lorsque j'enleve -k 2, c'est que la valeur retournée est la valeur en seconde depuis 1970 !!

en fait se servir de stat en exec de find , c'est malin pour creer un tableau nom fichier / valeur en seconde, mais la difficulté est de recuperer le nom de fichier dont la valeur en seconde correspondante est la plus élevée (ouf !!)

et c'est là ou les options de sort sont foireuses, j'ai l'impression qui me sort le fichier le plus vieux, ou le fichier le plus récent d'un dossier
0
Utilisateur anonyme
5 févr. 2009 à 10:33
Hourra j'ai trouvé !!

c'est le formatage de stat en sortie qui me fourvoyait.

la solution c'est grace à printf et cut :

find $* -print -exec stat --printf=%Y: {} \; | sort -nr | cut -d":" -f2 | head -1

Et oui, effectivement, -k 2 n'était pas nécessaire

;)
0
Utilisateur anonyme
5 févr. 2009 à 10:51
En fait , pour etre full compatible unix , il faut mieu metre ça :

find $* -print -exec stat -c %Y:%n {} \; | sort -nr | head -1 | cut -d":" -f2

mais dans la vérité, c'est pareil

:)
0