¿Cómo enumero todos los archivos en un directorio de forma recursiva y clasifico el resultado por hora de modificación?
Normalmente uso ls -lhtcpero no encuentra todos los archivos de forma recursiva. Estoy usando Linux y Mac.
ls -l en Mac OS X puede dar
-rw-r--r-- 1 fsr user 1928 Mar 1 2011 foo.c
-rwx------ 1 fsr user 3509 Feb 25 14:34 bar.c
donde la parte de la fecha no es consistente o alineada, por lo que una solución debe tener esto en cuenta.
Solución parcial
stat -f "%m%t%Sm %N" ./* | sort -rn | head -3 | cut -f2-
funciona, pero no de forma recursiva.

Respuestas:
Aquí hay un método que usa
statcomo @ johnshen64 sugiriófuente
find "$PWD" -type f -exec stat -f $'%m\t%N' '{}' \; | sort -rn | cut -f2-imprimiría solo las rutas absolutas de los archivos en OS X.stat¿Qué versión de estás usando? Su formato anterior no funcionó para mí. Tuve que usar la siguiente:find . -type f -exec stat --printf "%Y\t%y %N\n" '{}' \; | sort -rn | cut -f2-. Esto es constat (GNU coreutils) 8.23Use
find's-printfy ordene en un formato de fecha razonable:Esto debería minimizar las horquillas de proceso y, por lo tanto, ser el más rápido.
Ejemplos si no le gusta la segunda parte fraccionaria (que a menudo no se implementa en el sistema de archivos de todos modos):
EDITAR: Estándar
finden Mac no tiene-printf. Pero no es difícil instalar GNU find en Mac (también vea ese enlace para obtener más advertencias sobre la compatibilidad de Mac / Linux yxargs).fuente
find .debería poder obtener todos los archivos. Algo como esto:Necesita ajustarlo para sus necesidades.
fuente
lsen Linux tiene una--time-formatopción que puede usar para garantizar que las fechas de los archivos recientes y anteriores se muestren en el mismo formato.Esta respuesta a una pregunta similar en el sitio Unix Stack Exchange me ayudó porque estaba usando zsh:
Cómo enumerar archivos ordenados por fecha de modificación de forma recursiva (¡no hay un comando stat disponible!)
fuente