¿Cómo puedo enumerar (ls) los 5 últimos archivos modificados en un directorio?

138

ls -tque enumerará todos los archivos por tiempo modificado. Pero, ¿cómo puedo limitar estos resultados solo a los últimos n archivos?

Ryan
fuente
10
Invertir el orden ls -lrtpodría ayudar a alguien.
PJ Brunet
Me encanta @PJBrunet. He formado el hábito de siempre tener problemas, tharlya que tiende a tener todo lo que necesito.
Adam Grant

Respuestas:

246

Intenta usar cabeza o cola. Si desea los 5 archivos modificados más recientemente:

ls -1t | head -5

El -1 (que es uno) dice un archivo por línea y el encabezado dice que tome las primeras 5 entradas.

Si quieres los últimos 5 prueba

ls -1t | tail -5
Paul Rubel
fuente
2
Si no me equivoco, el shell representa la salida de lsen varias columnas, pero la salida lsse canaliza al siguiente comando con 1 archivo / directorio a la vez
Alex
ese parece ser el caso. Buena simplificación
Paul Rubel
3
Esto ignora el Total en la parte superior:ls -1t | head -n 6 | tail -n 5
Ryan
1
No veo un total, pero si hay uno que sin duda funcionaría.
Paul Rubel
18

La respuesta aceptada enumera solo los nombres de archivo, pero para obtener los 5 archivos principales también se puede usar:

ls -lht | head -6

dónde:

-l salidas en formato de lista

-h hace que la salida sea legible para humanos (es decir, los tamaños de archivo aparecen en kb, mb, etc.)

-t ordena la salida colocando primero el archivo modificado más recientemente

head -6mostrará 5 archivos porque lsimprime el tamaño del bloque en la primera línea de salida.

Creo que este es un enfoque un poco más elegante y posiblemente más útil.

Salida de ejemplo:

total 26960312 -rw-r--r--@ 1 user staff 1.2K 11 Jan 11:22 phone2.7.py -rw-r--r--@ 1 user staff 2.7M 10 Jan 15:26 03-cookies-1.pdf -rw-r--r--@ 1 user staff 9.2M 9 Jan 16:21 Wk1_sem.pdf -rw-r--r--@ 1 user staff 502K 8 Jan 10:20 lab-01.pdf -rw-rw-rw-@ 1 user staff 2.0M 5 Jan 22:06 0410-1.wmv

samisnotinsane
fuente
12

Use el tailcomando:

ls -t | tail -n 5
Alex
fuente
Esto le da a los 5 más viejos. Necesita invertir el sort ( ls -tr) o el uso en headlugar de tail, para obtener los 5 más nuevos.
Headbank
2

De forma predeterminada, ls -tordena la salida de la más nueva a la más antigua, por lo que la combinación de comandos a utilizar depende de en qué dirección desea que se ordene su salida.

Para los 5 archivos más nuevos ordenados del más nuevo al más antiguo, use headpara tomar las primeras 5 líneas de salida:

ls -t | head -n 5

Para los 5 archivos más nuevos ordenados del más antiguo al más nuevo, use el -rinterruptor para revertir lsel orden de clasificación y use tailpara tomar las últimas 5 líneas de salida:

ls -tr | tail -n 5
Headbank
fuente
1

ls -tlistar archivos por hora de creación, no por última vez modificada. Úselo ls -ltcsi desea enumerar los archivos por última vez modificada del último al primero (de arriba a abajo). Por lo tanto, para enumerar el último n:ls -ltc | head ${n}

victrr
fuente
1
¿A qué plataforma / versión te refieres? ¿Puedes proporcionar un enlace? Mirar la página de manual de Linux arroja lo contrario de lo que usted dice: -t sort by modification time, newest first
Joma