¿Cómo enumero todos los archivos en un directorio de forma recursiva y clasifico el resultado por hora de modificación?
Normalmente uso ls -lhtc
pero 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
stat
como @ 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.23
Use
find
's-printf
y 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
find
en 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
ls
en Linux tiene una--time-format
opció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