Encuentra los archivos más recientes

Encuentra los archivos más recientes

¿Cómo puedo saber el archivo al que se accedió más recientemente en un directorio determinado?

Puedo usar el findcomando para enumerar todos los archivos modificados/accedidos en los últimos nminutos. Pero aquí, en mi caso, no estoy seguro de cuándo se modificó/accedió al último archivo. Todo lo que necesito es enumerar todos los archivos a los que se accedió/modificó recientemente entre todos los demás subarchivos o subdirectorios, ordenados por sus tiempos de acceso/modificación, por ejemplo.

¿Es eso posible?

Respuesta1

Para imprimir los últimos 3 archivos a los que se accedió (ordenados desde el último archivo al que se accedió hasta el tercer último archivo al que se accedió):

find . -type f -exec stat -c '%X %n' {} \; | sort -nr | cut -d' ' -f2- | awk 'NR==1,NR==3 {print}'

Para imprimir los últimos 3 archivos modificados (ordenados desde el último archivo modificado hasta el antepenúltimo archivo modificado):

find . -type f -exec stat -c '%Y %n' {} \; | sort -nr | cut -d' ' -f2- | awk 'NR==1,NR==3 {print}'
  • find . -type f -exec stat -c '%X %n' {} \;: imprime la hora del último acceso seguida de la ruta del archivo para cada archivo en la jerarquía de directorios actual;
  • find . -type f -exec stat -c '%Y %n' {} \;: imprime la hora de la última modificación seguida de la ruta del archivo para cada archivo en la jerarquía de directorios actual;
  • sort -nr: ordena en orden numérico inverso;
  • cut -d' ' -f2-: imprime todos los campos separados por espacios desde el segundo campo en adelante;
  • awk 'NR==1,NR==3 {print}': imprime líneas en el rango #1-3.

Puede cambiar la cantidad de archivos que se mostrarán cambiando 3 por la cantidad deseada de archivos en formato awk 'NR==1,NR==3 {print}'.

Esta respuesta se basa en la versión GNU de stat, por lo que los usuarios de sistemas basados ​​en BSD tendrán que cambiar la cadena de formato de los statcomandos para que puedan imprimir las marcas de tiempo relevantes.

~ % touch file\ 1
~ % touch file\ 2
~ % touch file\ 3
~ % find . -type f -exec stat -c '%X %n' {} \; | sort -nr | cut -d' ' -f2- | awk 'NR==1,NR==3 {print}'
./file 3
./file 2
./file 1
~ % find . -type f -exec stat -c '%Y %n' {} \; | sort -nr | cut -d' ' -f2- | awk 'NR==1,NR==3 {print}'
./file 3
./file 2
./file 1
~ % cat file\ 1
~ % find . -type f -exec stat -c '%X %n' {} \; | sort -nr | cut -d' ' -f2- | awk 'NR==1,NR==3 {print}'
./file 1
./file 3
./file 2
~ % find . -type f -exec stat -c '%Y %n' {} \; | sort -nr | cut -d' ' -f2- | awk 'NR==1,NR==3 {print}'
./file 3
./file 2
./file 1
~ % touch file\ 2
~ % find . -type f -exec stat -c '%X %n' {} \; | sort -nr | cut -d' ' -f2- | awk 'NR==1,NR==3 {print}'
./file 2
./file 1
./file 3
~ % find . -type f -exec stat -c '%Y %n' {} \; | sort -nr | cut -d' ' -f2- | awk 'NR==1,NR==3 {print}'
./file 2
./file 3
./file 1

Respuesta2

Si desea que los archivos en un directorio determinado estén ordenados por antigüedad de modificación (los más recientes primero):

ls -t

Para ordenar por tiempo de acceso, agregue la -uopción.

ls -tu

Sin embargo, tenga en cuenta queLos sistemas Linux modernos no rastrean los tiempos de acceso exactos de forma predeterminada.. Por lo tanto, es posible que las marcas de tiempo de acceso no sean confiables.

Si desea encontrar el archivo más reciente dentro de un árbol de directorios, incluidos los subdirectorios, el método más sencillo con diferencia es utilizar zshclasificatorios globales.

print -lr -- **/*(om)

Utilice oaen lugar de ompara utilizar la hora de acceso en lugar de la hora de modificación. Puedes restringir las coincidencias, por ejemplo para obtener los 10 archivos más recientes:

print -lr -- **/*(om[1,10])

Esos saltan archivos ocultos. Si desea considerar también los archivos ocultos, agregue el Dcalificador glob. También puedes agregar el .calificador global para considerar soloregulararchivos (sin considerar enlaces simbólicos, directorios, fifos...), y mm-60/o mh-1restringir a archivos modificados por última vez dentro de la última hora.

Respuesta3

Puede utilizar el interruptor recursivo ( -R) lsjunto con el interruptor de ordenación por tiempo ( -t) y el interruptor de ordenación inversa ( -r) para enumerar todos los archivos en un árbol de directorios. Esto no ordenará todos los archivos por sus fechas de acceso/modificación en los subdirectorios, sino que los ordenará por esta fecha dentro de cada subdirectorio de forma independiente.

Usando un comando como este: ls -ltrR <sometopdir>.

Ejemplo

$ ls -ltrR .
total 759720
-rw-r-----@  1 sammingolelli  staff    2514441 Mar 31  2015 restfulapi-120704053212-phpapp01.pdf
-rw-r-----@  1 sammingolelli  staff     567808 Apr  7  2015 USGCB-Windows-Settings.xls
-rw-r-----@  1 sammingolelli  staff     180736 Apr  7  2015 USGCB-RHEL5-Desktop-Settings-Version-1.2.5.0.xls
-rw-r-----@  1 sammingolelli  staff       6474 Apr  8  2015 tap_kp_mavericks.txt

./kerberos:
total 5464
-rw-r-----@ 1 sammingolelli  staff    37317 Oct  2 13:03 Set_up_Kerberos_instruction_d8.docx
-rw-r-----@ 1 sammingolelli  staff  2753195 Oct 13 13:49 Keberos configuration with AD 01_09_2014.pdf

./homestarrunner:
total 10624
-rw-rw-rw-@ 1 sammingolelli  staff   319422 May 10  2000 error_hs.wav
-rw-rw-rw-@ 1 sammingolelli  staff    53499 Jun  8  2001 sb_duck.mp3
-rw-rw-rw-@ 1 sammingolelli  staff   199254 Mar 11  2002 email_sb.wav
-rw-rw-rw-@ 1 sammingolelli  staff    39288 Mar 25  2002 bubs_dontutalk.mp3
-rw-rw-rw-@ 1 sammingolelli  staff    75432 May  6  2002 trash_sb.wav
-rw-rw-rw-@ 1 sammingolelli  staff   298946 Dec  1  2002 error_sb.wav
-rw-rw-rw-@ 1 sammingolelli  staff   298686 Dec  1  2002 startup_hs.wav
-rw-rw-rw-@ 1 sammingolelli  staff    90279 Dec  1  2002 sb_meedlymee.mp3
-rw-rw-rw-@ 1 sammingolelli  staff    73561 Dec  1  2002 sb_dubdeuce.mp3
-rw-rw-rw-@ 1 sammingolelli  staff   193097 Dec  1  2002 sb_pizza.mp3
-rw-rw-rw-@ 1 sammingolelli  staff    30093 Dec  1  2002 sb_stiny.mp3
-rw-rw-rw-@ 1 sammingolelli  staff    61858 Dec  1  2002 ss_sadflying.mp3
-rw-rw-rw-@ 1 sammingolelli  staff   150142 Dec  1  2002 email_hs.wav
-rw-rw-rw-@ 1 sammingolelli  staff    68545 Dec  1  2002 bubs_grabbinbutt.mp3
-rw-rw-rw-@ 1 sammingolelli  staff    61022 Dec  1  2002 cz_jeorghb.mp3
-rw-rw-rw-@ 1 sammingolelli  staff    40124 Dec  1  2002 marzy_nasty.mp3
-rw-rw-rw-@ 1 sammingolelli  staff   224116 Dec  1  2002 shutdown_sb.wav
-rw-rw-rw-@ 1 sammingolelli  staff   260546 Dec  1  2002 shutdown_hs.wav
-rw-rw-rw-@ 1 sammingolelli  staff    57686 Dec  1  2002 trash_hs.wav

Respuesta4

¿Quiere ordenar el conjunto completo de archivos "recientes" por su hora de acceso/modificación, independientemente de su ubicación en el árbol de archivos?

Una forma de hacer esto es imprimir statel tiempo de modificación de cada archivo, sortpor resultado, y luego cutel tiempo de modificación de los resultados.

Esto se interrumpirá para los archivos que contienen nuevas líneas en sus nombres, pero para otros archivos, aquí hay una solución que enumerará los archivos modificados en los últimos 60 minutos, ordenados desde el más reciente hasta el menos recientemente modificado:

find . -type f -mmin -60 -exec stat -c $'%Y\t%n' {} + | sort -nr | cut -f2-

información relacionada