¿Cómo obtener solo archivos creados después de una fecha con ls?

97

Con el lscomando, ¿es posible mostrar solo los archivos creados después de una fecha específica, hora ...?

Lo pregunto porque tengo un directorio con miles de archivos.

Quiero ver todos los archivos que se crearon desde ayer.

Lo uso ls -ltrpero tengo que esperar para ver todos los archivos ...

¿Hay un equivalente de DIRECTORY/SINCE=dateOpenVMS?

Luc M
fuente
1
lsenumera archivos, pero no ofrece mucho para seleccionar qué archivos enumerar o el formato de salida. Use globbing (comodines de shell) o findcuando desee seleccionar archivos por nombre o metadatos (por ejemplo, fecha).
Gilles
3
Entonces, ¿cómo fue la cita con ls? ¿Ustedes dos se cayeron bien?
Garrett Albright
3
Con zsh:ls -1 -- *(.m-1)
don_crissti

Respuestas:

123

Puede usar el findcomando para buscar todos los archivos que se hayan modificado después de un cierto número de días.

Por ejemplo, para buscar todos los archivos en el directorio actual que se han modificado desde ayer (hace 24 horas) use:

find . -maxdepth 1 -mtime -1

Tenga en cuenta que para buscar archivos modificados antes de hace 24 horas, debe usar en -mtime +1lugar de -mtime -1.

dogbane
fuente
3
Lo mismo que habría dicho. No hay razón para limitarse lsaquí, Luc.
Warren Young
15
Con GNU find, hay otras posibilidades. -mmin 5enumera los archivos modificados en los últimos 5 minutos. -newermt "2011-02-27 13:42"enumera los archivos modificados desde la fecha especificada. Puede usar en -exec ls --color -ld {} +lugar de -lsobtener la pantalla a color habitual (si le gusta la salida de color ls).
Gilles
44
Tenga en cuenta el signo menos:find . -mmin -5
user7543
y -maxdepth 1 también se puede aumentar a cualquier valor n para buscar archivos en el nivel de subdirectorio
anshuman
3
para mí funciona así: buscar. -type f -newermt '15/01/2012 18:09:00'
woohoo
15
find . -type f -newermt '1/30/2017 0:00:00'

Esto encontrará todos los archivos modificados después de una fecha específica.

nulabilidad
fuente
1
ls -ltr | grep "`date | awk '{print $2" "$3}'`"
Trant Batey
fuente
55
Hola trant Si bien su solución es creativa al tratar de respetar la solicitud de la pregunta de usar ls, el análisis de la salida de ls rara vez es seguro (por ejemplo, ¿qué sucede con los nombres de archivo que incluyen nuevas líneas aquí?), Y nos gusta que las respuestas no sean solo una: revestimientos, sino más bien para explicar cómo funcionan con tanto detalle como sea relevante.
dhag
1
Problemas: (1) En mi sistema, datedice Jun 03, pero lsdice Jun  3, así que esto no funciona. (2) Hace una semana, la fecha era el 27 de mayo.  ls -l | grep "May 27"Encontraría archivos modificados ese día, pero también archivos modificados el 27 de mayo de cualquier otro año, y archivos con "27 de mayo" en su nombre. (Y si usted piensa que es una preocupación totalmente falso, mirar hacia arriba “DEC 10” .) (3) y, si se las arregló para llegar datea decir Jun 2, grepping para que se encuentre Jun 20a través Jun 29, pero no Jun  2(con dos plazas). ... (Continúa)
G-Man
1
(Cont.) ... (4) El OP estaba usando ls -ltrpara obtener los archivos modificados más recientemente al final de la lista. Si está buscando una fecha, no hay necesidad de hacerlo (excepto para obtener los archivos del 27 de mayo de 2015 al final de la lista, después de los archivos del 27 de mayo de 2014, 27 de mayo de 2013, etc.). (5) En awk, print $2, $3es equivalente a print $2" "$3, y es mucho más fácil de leer, especialmente cuando hay otros tres niveles de citas.
G-Man
ls -ltr | grep "$(date | awk '{print $2,$3}')"
SergioAraujo
0

Espero que esto funcione:

ls -ltr | awk '$6 == "May" && $7 >=01 && $7 <= 31 {print $9}'

Aquí:

$6 indicates position of month
$7 indicates day of the month

Este comando anterior imprime todos los nombres de archivo creados a partir del 1 de mayo y hasta el 31 de mayo.

si quieres imprimir la fecha también en la consola prueba esto

ls -ltr | awk '$6 == "May" && $7 >=01 && $7 <= 31 {print $6"-"$7,$9}'

Si desea especificar la ruta del directorio, puede probar esto

ls -ltr <path>| awk '$6 == "May" && $7 >=01 && $7 <= 31 {print $6"-"$7,$9}'
Rohit Nimmala
fuente
Por muchas razones, no es una buena idea analizar la lssalida. Y no todos hablan inglés :-)
Luc M