ejemplos - comandos shell linux
en la terminal de Linux, ¿cómo muestro la última fecha de modificación de la carpeta teniendo en cuenta su contenido? (3)
Así que aquí está el trato. Digamos que tengo un directorio llamado "web", entonces
$ ls -la
drwx------ 4 rimmer rimmer 4096 2010-11-18 06:02 web
PERO dentro de este directorio, web / php /
$ ls -la
-rw-r--r-- 1 rimmer rimmer 1957 2011-01-05 08:44 index.php
Eso significa que aunque el contenido de mi directorio, /web/php/index.php se modificó por última vez en 2011-01-05, el directorio / web / se informa como la última modificación en 2010-11-18.
Lo que tengo que hacer es informar la última fecha de modificación de mi / web / directorio como la última fecha de modificación de cualquier archivo / directorio dentro de este directorio, recursivamente.
¿Cómo voy a hacer esto?
Algo como:
find /path/ -type f -exec stat /{} --printf="%y/n" /; |
sort -n -r |
head -n 1
Explicación:
- el comando find imprimirá la hora de modificación para cada archivo que ignore los directorios recursivamente (de acuerdo con el comentario de IQ Andreas, no puede confiar en las marcas de tiempo de las carpetas)
- ordenar -n (numéricamente) -r (reverso)
- cabeza -n 1: obtener la primera entrada
Si pudiera, votaría por la respuesta de Paulo. Lo probé y entendí el concepto. Puedo confirmar que funciona El comando find
puede generar muchos parámetros. Por ejemplo, agregue lo siguiente a la cláusula --printf
:
%a for attributes in the octal format
%n for the file name including a complete path
Ejemplo:
find Desktop/ -exec stat /{} --printf="%y %n/n" /; | sort -n -r | head -1
2011-02-14 22:57:39.000000000 +0100 Desktop/new file
Permítanme plantear también esta pregunta: ¿El autor de esta pregunta quiere resolver su problema usando Bash o PHP? Eso debe ser especificado.
Si tiene una versión de find
(como GNU find
) que admita -printf
entonces no es necesario llamar a stat
repetidamente:
find /some/dir -printf "%T+/n" | sort -nr | head -n 1
o
find /some/dir -printf "%TY-%Tm-%Td %TT/n" | sort -nr | head -n 1
Si no necesita recursividad, sin embargo:
stat --printf="%y/n" *