Listar todos los archivos cambiados recientemente (recursivo)


21

Entonces, quiero mostrar (a través de, lspor ejemplo) todos los archivos, que se modificaron en los últimos siete días. Si estoy en mi carpeta docroot, debería poder mirar "más profundo".

Por ejemplo:

File        Last changed
docroot
|- myfile1  30.11.2015
|- myfile2  10.11.2015
|- MySub
   |-sub1   30.11.2015
   |-sub2   10.11.2015

Por lo tanto, el ls(o lo que quepa) debería salir myfile1y (si es posible) MySub/sub1.

¿Es esto factible con un comando?

Respuestas:


39

Por supuesto. Desde el directorio en el que está, haga:

find . -type f -mtime -7 -exec ls -l {} \; 

Agregue una redirección (también conocida > results.txtpara almacenarlos en ese archivo).

  • type f solo archivos y no directorios
  • mtime -7 hace 7 días hasta ahora (+7 sería 'anterior a 7 días')
  • y luego lo alimenta lspara mostrar una lista larga

También puedes jugar con la ls -lparte:

find . -type f -mtime -7 -exec ls -Rl --time-style=long-iso {} \; 
find . -type f -mtime -7 -exec ls -R  --time-style=long-iso {} \; 

mostrará un método similar a un árbol con directorios entre los archivos en la lista larga (1) o en la lista corta (2).


44
findtiene una lsopción para que puedas hacerlofind . -type f -mtime -7 -ls
heemayl

Claro, pero esto lo hace un poco más genérico (uso este método para encontrar archivos que necesito -remover- y puedo cambiar ese comando para hacerlo :))
Rinzwind

3
También es más apropiado usar el find ... -exec ls -l {} +que se ejecuta de manera ls -lmucho más eficiente, menos veces con múltiples parámetros. Esta es una opción estándar findespecificada por POSIX.
pabouk

5

Con zsh:

ls -l **/*(.m-7)
  • **/* buscará archivos recursivamente comenzando desde el directorio actual

  • (.m-7)es un calificador global donde .indica un archivo normal, m-7indica archivos que se modificaron en los últimos 7 días


2

El siguiente comando funciona como un sueño en Mac OSX, tal vez también en ubuntu ...

find . -type f -mtime -7 -exec stat -lt "%Y-%m-%d %H:%M:%S" {} \; | cut -d\  -f6- | sort -r

Esto encuentra archivos en el árbol de directorios actual que se han modificado en los últimos 7 días, genera la fecha de modificación + hora y ruta, primero ordenadas más nuevas.

Salida de ejemplo:

2018-02-21 22:06:30 ./fmxmlsnippet.xml
2018-02-19 12:56:01 ./diff.html
2018-02-19 12:44:37 ./temp/iDDR/XMSC_fmxmlsnippet.xml
2018-02-18 22:04:05 ./temp/iDDR/XMFD_fmxmlsnippet.xml
2018-02-15 10:18:27 ./xml/iDDR/XML2_fmxmlsnippet.xml
2018-02-15 10:13:29 ./xsl/fmxmlsnippet/XML2_fmCM_AnalyseLayout.xsl
2018-02-15 10:11:36 ./xsl/.DS_Store
2018-02-15 10:10:51 ./xsl/_inc/inc.XML2_fmCM_ReportReferencesToExternalFiles.xsl
2018-02-15 10:10:09 ./xsl/_inc/.DS_Store
2018-02-15 10:07:35 ./xsl/fmxmlsnippet/XML2_fmCM_AnalyseLayout-NoAnchors.xsl
2018-02-15 10:07:35 ./xsl/_inc/inc.XML2_fmCM_AnalyseLayout.xsl

Agradecería cualquier comentario de los usuarios de ubuntu.


La única solución que funcionó bien para mí en Mac. ¡Gracias!
artnikpro

De nada @artnikpro!
MrWatson

1

No es exactamente lo que se pidió ... pero es mucho más fácil de recordar ...

ls -alRt docroot

o

ls -alRt /path/to/top/level/directory

0

7 días que son 60 segundos * 60 minutos * 24 horas * 7 días = 604800 segundos

Averigüe la fecha actual en segundos (tiempo de época Unix):

$ date +%s
1448876323

Resta los 7 días en segundos:

expr $(date +%s) - 604800
1448271548

Ahora tome el statcomando e imprima estadísticas para todos los archivos en formato "nombre + tiempo en segundos" y úselos awkpara recortar aquellos archivos cuyo tiempo de modificación es mayor que la fecha que calculamos

$ stat --printf="%n %Y\n" $HOME/* | awk '$2 > 1448271265 {print $0}'
/home/xieerqi/1448428697574.png 1448429613
/home/xieerqi/1448763343273.png 1448763478
/home/xieerqi/1510DRIVE 1448352453
/home/xieerqi/addRemoveDistribution 1448666843
/home/xieerqi/add-update.awk 1448716356
/home/xieerqi/add-update.sh 1448625092

Particularmente interesantes son los últimos 3 archivos, porque sé que los estuve trabajando hace menos de 7 días. Entonces sé que funciona


2
Tenga en cuenta que en lugar de awk '$2 > 1448271265 {print $0}'usted puede decir directamente awk '$2 > 1448271265'. En una condición verdadera, awk imprime la línea actual como una acción predeterminada.
fedorqui
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.