Alors voici l'affaire. Disons que j'ai un répertoire nommé "web", donc
$ ls -la
drwx------ 4 rimmer rimmer 4096 2010-11-18 06:02 web
MAIS dans ce répertoire, web/php /
$ ls -la
-rw-r--r-- 1 rimmer rimmer 1957 2011-01-05 08:44 index.php
Cela signifie que même si le contenu de mon répertoire, /web/php/index.php, a été modifié pour la dernière fois le 2011-01-05, le répertoire/web/lui-même est signalé comme ayant été modifié pour la dernière fois le 2010-11-18.
Ce que je dois faire, c'est que la date de dernière modification de mon répertoire/web/soit indiquée comme la dernière date de modification de tout fichier/répertoire de ce répertoire, de manière récursive.
Comment puis-je faire cela?
Quelque chose comme:
find /path/ -type f -exec stat \{} --printf="%y\n" \; |
sort -n -r |
head -n 1
Explication:
Si vous avez une version de find
(telle que GNU find
) qui prend en charge -printf
, Il n'est pas nécessaire d'appeler stat
à plusieurs reprises:
find /some/dir -printf "%T+\n" | sort -nr | head -n 1
ou
find /some/dir -printf "%TY-%Tm-%Td %TT\n" | sort -nr | head -n 1
Si vous n'avez pas besoin de récursivité, cependant:
stat --printf="%y\n" *
Si je pouvais, je voterais pour la réponse de Paulo. Je l'ai testé et compris le concept. Je peux confirmer que ça marche. La commande find
peut générer de nombreux paramètres. Par exemple, ajoutez ce qui suit au --printf
clause:
%a for attributes in the octal format
%n for the file name including a complete path
Exemple:
find Desktop/ -exec stat \{} --printf="%y %n\n" \; | sort -n -r | head -1
2011-02-14 22:57:39.000000000 +0100 Desktop/new file
Permettez-moi de poser cette question également: l'auteur de cette question veut-il résoudre son problème en utilisant Bash ou PHP? Cela devrait être précisé.