Desea ordenar los archivos por fecha de actualización, incluidos los subdirectorios

17

Quiero ordenar solo los archivos por fechas de actualización, incluidos los subdirectorios.

Descubrí ls -lrtR | grep ^-. pero no parece ordenar por fechas de actualización.

Y necesito guardar esta lista en un archivo. ¿Es posible?

Apr 01 2010  InsideDoosanServiceImpl.class  // in A directory
Apr 08 2010  MainController.class  // in B directory
Apr 07 2010  RecommendController.class  // in B directory
Apr 01 2010  MainDao.class  // in B directory

Quiero decir que toda la lista no está ordenada por fecha, sino que primero se ordena por carpeta y se ordena por fecha.

Quiero una lista ordenada por fecha, incluidos todos los subdirectorios.

Deckard
fuente

Respuestas:

12

No estoy seguro de qué quiere decir exactamente update dates, pero está utilizando la -ropción que según el hombre hace esto:

-r Invierta el orden de clasificación para obtener el orden lexicográfico inverso o las entradas más antiguas primero (o los archivos más grandes al final, si se combinan con ordenar por tamaño

Creo que esto debería ser lo suficientemente bueno para usted si necesita archivos ordenados por tiempo.

ls -lRt

Si no necesita todas las otras cosas enumeradas para lsentonces, puede usar:

ls -1Rt

Para capturar el resultado en un archivo, puede usar el operador de redirección >y dar un nombre de archivo. Entonces puedes hacer algo como esto:

ls -lRt > sortedfile.list

Actualizar:

find . -type f -exec ls -lt {} +
jaypal singh
fuente
Me refiero a la última vez que se modificó un archivo :)
Ordenar el resultado se ordena por carpeta y fecha. Quiero ordenar por fecha y carpeta ... ¿es posible?
Lo siento, ¿puedes mostrarme alguna salida? Si seguía, no seguía la clasificación de la carpeta ls -lrt.
jaypal singh
// Jaypal Singh, actualicé mi salida a mi pregunta ↑ :). Realmente espero que lo entiendas y lo siento por mi mal inglés.
1
Esto falla si la lista de archivos es lo suficientemente larga como para forzar la xargsrealización de múltiples llamadas ls, ya que los archivos solo se ordenan correctamente dentro de cada lsinvocación pero carecen de un orden global coherente en la salida.
Brandon Rhodes
19

Con ls, -R repetirá directorios y -t ordenará por modificación. Sin embargo, atraviesa directorios de forma recursiva y aplica -t a cada directorio. No acumula todos los archivos de todos los directorios y luego los ordena. (Por lo que yo entiendo, esto último es lo que quieres)

Con gnu find (1) puede especificar el formato de salida para incluir el número de segundos desde epoch y el nombre de archivo, luego puede canalizar esto para ordenar (1).

find . -type f -printf "%T@ %f\n" | sort -n > out.txt
Rolf Rander
fuente
GNU findayuda. Pero OP funciona en AIXmáquinas, por GNU findlo que no estaba disponible para él.
jaypal singh
Es una pena lsque no se pueda hacer que acumule archivos antes de ordenarlos. lses tan rápido en comparación con find.
Nathan ReinstateMonica Arthur
lsy findlee los mismos datos, así que no puedo imaginar ninguna razón por la que debería ser considerablemente más rápido que encontrar. En mi sistema, encontrar es 5 veces más rápido (buscar en aproximadamente medio millón de archivos)
Rolf Rander
77
Es posible que desee una fecha / hora completa y no solo el nombre del archivo, sino también la ruta en la salida, en ese caso, modifique la cadena de formato: find . -type f -printf "%T@ %Tc %p\n" | sort -n > out.txtproduciendo entradas de salida como 1427913836.2330520210 wed 1 apr 2015 20:43:56 ./subdir/file.txt.
Carl
Excelente. Eso realmente me ayudó. ¡He estado buscando una forma de clasificar en subdirectorios durante años!
bhu Boue vidya