Lista de archivos por fecha de última edición

104

Tengo un directorio: /home/user/

¿Cómo puedo enumerar todos los archivos de este directorio (incluidos los de los subdirectorios) y ordenarlos por la fecha en que se modificaron por última vez?

Marty
fuente

Respuestas:

172

Puedes usar:

ls -Rt

donde -Rsignifica recursivo (incluye subdirectorios) y -tsignifica "ordenar por fecha de última modificación".


Para ver una lista de archivos ordenados por fecha de modificación, use:

ls -l -Rt

También se puede crear un alias para lograr esto:

alias lt='ls -lht'
lt

Donde -hda una salida más legible.

mipadi
fuente
16
Gracias, eso es perfecto. También agregué una -l para poder ver las fechas, así que para cualquiera que busque esto más tarde, es- $ ls -lRt
Marty
4
Si está haciendo esto en el indicador y desea ver los archivos modificados más recientemente, considere ls -lrt[RhA]. la -rinvierte el orden de clasificación, dejando material recientemente editado en la parte inferior de la lista ...
dmckee --- ex-moderador gatito
Esto agregado a -ilale brinda prácticamente toda la información que necesitaría. $ ls -ilaRt
Falkenfighter
He ampliado esta respuesta porque usar ll -Rtfue la solución perfecta para mí, ya que necesitaba ver los archivos por fecha de modificación más reciente. Esto podría ser útil para otros.
Mus
@MusTheDataGuy llno existe y no es un comando. Es principalmente un alias en el shell bash, pero no está definido en la mayoría de / some /? distribuciones de linux. Algunos lo definen como alias ll='ls -l'en /etc/bash.bashrc o /etc/.bashrc. Por lo tanto, es posible que no funcione y que no exista en el sistema OP. Utilice ls -l -Rtal menos, como lses un comando estándar según lo definido por posix. O especifique lo que quiso decir alias ll='ls -l'; ll -Rt.
KamilCuk
73

Si desea una lista maestra en la que todos los archivos estén ordenados juntos por fecha de modificación, mostrando el directorio en el que están, pero no agrupados por directorio , puede usar esto:

find . -type f -printf "%-.22T+ %M %n %-8u %-8g %8s %Tx %.8TX %p\n" | sort | cut -f 2- -d ' '

El resultado se parece mucho a ls -l:

-rw-r - r-- 1 raíz raíz 3892 11/08/2009 11:03:36 /usr/share/man/man1/xmllint.1.gz
-rw-r - r-- 1 raíz raíz 22946 13/08/2009 11:59:20 /usr/share/man/man1/curl.1.gz
-rw-r - r-- 1 raíz raíz 728 17/08/2009 12:06:33 /usr/share/man/man1/thunderbird.1.gz
-rw-r - r-- 1 raíz raíz 873 18/08/2009 10:52:47 /usr/share/man/man1/libgnutls-config.1.gz
-rw-r - r-- 1 raíz raíz 2552 19/08/2009 02:00:34 /usr/share/man/man3/Purple.3pm.gz
-rw-r - r-- 1 raíz raíz 9546 19/08/2009 02:02:00 /usr/share/man/man1/pidgin.1.gz
-rw-r - r-- 1 raíz raíz 2201 19/08/2009 02:02:46 /usr/share/man/man3/Pidgin.3pm.gz
-rw-r - r-- 1 raíz raíz 926 19/08/2009 02:03:05 /usr/share/man/man1/purple-remote.1.gz
-rw-r - r-- 1 raíz raíz 18052 19/08/2009 04:11:47 /usr/share/man/man1/mono.1.gz
-rw-r - r-- 1 raíz raíz 1845 19/08/2009 04:11:47 /usr/share/man/man5/mono-config.5.gz

Mac OS X

Para aquellos de ustedes que usan Mac OS X, la opción -printf no está disponible en BSD find (obtendrá este error :)find: -printf: unknown primary or operator . Afortunadamente, puede instalar GNU find a través de Homebrew (también debería haber una opción para Fink y Macports ):

brew install findutils

Después de instalarlo, GNU find debería estar disponible como gfind. Entonces, todo lo que necesita hacer es cambiar la línea de arriba a:

gfind . -type f -printf "%-.22T+ %M %n %-8u %-8g %8s %Tx %.8TX %p\n" | sort | cut -f 2- -d ' '
Pausado hasta nuevo aviso.
fuente
3
Buena esa. Todo el asunto de la agrupación de directorios con ls -R es molesto.
El Yobo
1
Gran código, tomó el script aprox. 5 segundos para ordenar e imprimir 13k fotos en muchas carpetas diferentes (a través de Cygwin en una computadora bastante lenta).
Magnus
Oh, eso es asombroso. Para las personas (como yo) con las que no está tan familiarizado findcomo el autor, esos argumentos -printfson directivas de formato que se pueden encontrar en man find(busque la quinta instancia de printfen esa página).
Owen Blacker
4
Para cualquiera que quiera usar esto en MacOS pero no quiera molestarse en instalar findutils: find . -type f -print0 | xargs -0 stat -f "%m %Sp %l %-8Su %-8Sg %8z %Sm %N" | sort | cut -f 2- -d' 'le dará aproximadamente el mismo resultado en MacOS usando solo utilidades
integradas
sort -rpara invertir la clasificación y tener los archivos modificados más recientemente en la parte superior.
maryisdead
0

MAC OSX 2019

Si no le importa a qué hora se creó, pero desea que su lista esté ordenada, use este comando

==> ls -t

Si desea hacer un pedido y ver la fecha y la información del usuario, use este comando

===> ls -lt

Mussa Charles
fuente
0

Para los zshusuarios, también puede usar calificadores glob (también documentados en man zshexpn):

echo *(om)

Donde osignifica orden de clasificación, arriba y msignifica hora de última modificación .

Esto puede ser útil cuando se usa en un bucle for u otro comando:

for file in *(^om); do
  [ -e "$file" ] || continue
  # do something with file orderer from least recently modified to last modified
done

O encadenado con otro calificador glob:

last_modified_file=(*(om[1]))
Ulysse BN
fuente