2011-08-24 7 views
8

¿Es posible obtener la fecha y hora de modificación de una carpeta?
Sé que puede usar stat -f "%m" folder, pero no refleja los cambios de subarchivos/carpetas.Obtener carpeta (o subarchivos/carpetas) última fecha y hora de modificación

cosas que no funcionan:

  • ls -l folder - no refleja los cambios dentro de la carpeta
  • stat -f "%m" folder - igual que arriba
  • date -r folder - mismo otra vez
  • find foo bar baz -printf - la opción printf no existe en mi versión de find

versiones de las cosas:

  • SO: Mac OS X 10.7.1
  • Bash: GNU bash, versión 3.2.48 (1) -release (x86_64-manzana-darwin11)
+0

Pruebe las respuestas que se enumeran aquí: http://stackoverflow.com/questions/4997242/in-linux-terminal-how-do-i-show-the-folders-last-modification-date-taking- es – Mohammad

+0

Ninguno, de ellos funciona como la opción 'printf' no está implementada en' find' en Mac OS X 10.7.1 – Tyilo

+0

¿Está buscando el archivo o directorio modificado más recientemente en un directorio particular? ¿Qué tan recursivo quieres obtener? –

Respuesta

13

Solución:

find . -exec stat -f "%m" \{} \; | sort -n -r | head -1 

Explicación:

  1. el comando find atraviesa el directorio actual (.) y para cada archivo encontrado ejecuta (-exec) el comando stat -f "%m". stat -f "%m" imprime la última modificación de la marca de tiempo de unix del archivo.
  2. sort -n -r ordena la salida del comando find numéricamente (-n) en orden inverso (-r). Esto mostrará primero la última marca de tiempo de modificación.
  3. head -1 luego extrae la primera línea de la salida de sort. Esta es la última modificación de la marca de tiempo de Unix de todos los archivos.
+0

sería bueno para obtener una explicación de lo que cada parte está haciendo, este comando se estrelló en mi computadora. –

+0

@HermannIngjaldsson Agregó una explicación. Si está utilizando un sistema operativo basado en Linux y no basado en BSD, probablemente esto no funcione para usted. – Tyilo

+0

Esto proporciona información incorrecta en caso de que alguien elimine un archivo en una carpeta. Digamos, por ejemplo, que está tratando de mantener un hash md5 para una carpeta y le gustaría saber cuándo volver a calcularlo. Entonces esto no funcionaría ... – Cookie

5

usted podría intentar 'fecha de carpeta -r' para darle una fecha de la última modificación

+4

'-r segundos Imprime la fecha y la hora representadas por segundos, donde los segundos son el número de segundos desde la Época (00:00:00 UTC, 1 de enero, 1970; vea el tiempo (3)), y puede especificado en decimal, octal, o hexadecimal. – Tyilo

+0

+1 @Tylio pero para aclarar - "fecha -r carpeta + '% s'" - devolverá los segundos desde epoch mira "fecha - ayuda" para más información – ChrisK

+4

@ChrisK '-r' significa archivo de referencia en GNU' date' que parece ser a lo que se refiere mientras que en BSD 'date' (el sabor Mac OS X usa), se comporta como se cita en el comentario de Tyilo – jw013

0

siempre se puede obtener de ls:

ls -ld mydir | awk -F' ' '{ print $6 " "$7 }' 
+0

No toma subarchivos en consideración – Tyilo

+0

No estoy seguro de lo que quiere decir con "subarchivos"; sin embargo, en mi sistema, los archivos nuevos creados en el directorio actualizarán la hora de modificación del directorio padre. –

+0

@JJ no en el mío desafortunadamente – Tyilo

Cuestiones relacionadas