sintaxis ejemplos comandos comando basicos linux bash shell scripting ubuntu

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