2012-03-08 16 views
21

Me gustaría construir un comando Linux para listar todos los archivos (con sus rutas completas) dentro de un directorio específico (y subdirectorios) ordenado por el tiempo de acceso.Listar todos los archivos (con rutas completas) en un directorio (y subdirectorios), ordenar por tiempo de acceso

ls puede ordenar por el tiempo de acceso, pero no da la ruta completa. find proporciona la ruta completa, pero el único control que tiene sobre el tiempo de acceso es especificar un rango con -atiempo N (accedido al menos hace 24 * N horas), que no es lo que quiero.

¿Hay alguna manera de ordenar por tiempo de acceso y obtener la ruta completa a la vez? Podría escribir un guión, pero parece que debería haber una manera de hacerlo con los programas estándar de Linux.

Respuesta

20
find . -type f -exec ls -l {} \; 2> /dev/null | sort -t' ' -k +6,6 -k +7,7 

Este encontrarán todos los archivos y ordenarlos por fecha y hora. A continuación, puede utilizar awk o cut para extraer las fechas y los archivos de nombre de la ls -l salida

+0

Funciona bastante bien. Supongo que esto no está limitado por getconf ARG_MAX? – Andrew

+0

Correcto, no está limitado por ARG_MAX porque no lo pasa como argumentos, sino que canaliza la salida. No hay límite para la cantidad de datos que se pueden canalizar entre los programas. – Alex

+0

¡Genial! ¡Gracias amigo! Es muy bueno saber acerca de esa limitación ya que mi directorio tiene muchos, muchos archivos. – Andrew

11

usted podría intentar:

ls -l $(find /foo/bar -type f) 
  • puede agregar otras opciones (por ejemplo, para la clasificación de -t) a ls comando para lograr su objetivo.
  • También se puede inscribir su criterio de búsqueda a find cmd
+1

poco modifiqué esto y dieron exactamente lo que quiero con ls -ult $ (encontrar el directorio type f) | grep -o "[^] \ + $" Gracias! – Andrew

+2

Tenga en cuenta que, como la salida de '$ (find DIRECTORY -type f)' se usa como argumento de línea de comando para 'ls -ult', estará limitado a' getconf ARG_MAX' files – Alex

+0

Gracias por las cabezas arriba, Alex! – Andrew

3

find . -type f | xargs ls -ldt debe hacer el truco, siempre y cuando no hay tantos archivos que se pulsa el comando como límite de la argumentación y desovar 2 casos de ls.

1
find . -type f -exec ls -l --full-time {} \; 2> /dev/null | sort -t' ' -k +6,6 -k +7,7 

La respuesta de Alex no funcionó para mí ya que tenía archivos de más de un año y la clasificación se estropeó. Lo anterior agrega el parámetro --full-time que neutraliza los valores de fecha/hora y los hace ordenables independientemente de su antigüedad.

+0

'--full-time' parámetro no existe en Mac OS X. @ La solución de Kent funciona muy bien. –

1
pwd | xargs -I % find % -type f 
Cuestiones relacionadas