Parece que se permiten preguntas de scripting bash.
Alan
@ MichaelScheper: Ni siquiera sé por dónde empezar con ese comentario.
Carreras de ligereza en órbita el
1
@Notinlist: Aquí está la respuesta: meta.stackexchange.com/questions/10249/… Desafortunadamente, resulta que un límite de tiempo ha expirado. Lástima, ya que las búsquedas en la web todavía llegan aquí, y la respuesta aceptada fue útil para mucha gente.
Michael Scheper
@MichaelScheper: Si puede encontrar una opción para votar para migrar a unix.stackexchange.com, apúnteme por todos los medios. Como no tiene el representante para ver el diálogo de cierre, le daré una pista: no hay ninguno. Considera ser menos combativo cuando no tienes idea de lo que estás hablando. Gracias por tu atención.
Carreras de ligereza en órbita
55
@LightnessRacesinOrbit: Pido disculpas por parecer "combativo". No se me permite editar mis comentarios, pero para referencia futura, ¿fue mi comentario elogiando la pregunta que lo ofendió? Debo decir que me siento un poco ciego, incluso después de darle a su comentario anterior el beneficio de la duda. En realidad, estaba tratando de ser más constructivo que agregar otro 'yo también', mirando cómo funciona la migración: meta.stackexchange.com/a/10250/249555 ¿Quizás el límite de tiempo de 60 días oculta esa opción? Perdón por el vagabundo. Gracias de nuevo, sinceramente, por su tiempo y atención.
Michael Scheper
Respuestas:
323
Como señaló Max, no puede, pero verificar archivos modificados o accedidos no es tan difícil. Escribí un tutorial sobre esto, tan tarde como hoy. La esencia de la cual es usar -newerXYy ! -newerXY:
Ejemplo: para buscar todos los archivos modificados el 7 de junio de 2007:
$ find .-type f -newermt 2007-06-07!-newermt 2007-06-08
Para buscar todos los archivos accedidos el 29 de septiembre de 2008:
$ find .-type f -newerat 2008-09-29!-newerat 2008-09-30
O, los archivos que tuvieron su permiso cambiado el mismo día:
$ find .-type f -newerct 2008-09-29!-newerct 2008-09-30
Sin embargo, si no cambia los permisos en el archivo, 'c' normalmente correspondería a la fecha de creación.
Mi versión de find (GNU 4.2.32) no parece admitir los predicados -newerXY. ¿Se necesita una versión mínima particular? ¿O se trata de compilar find con un interruptor de configuración especial?
yukondude
1
@yukondude: Tienes razón. La versión de find que tengo localmente - GNU 4.4.0 - lo tiene, mientras que 4.1.20 que tengo en Dreamhost no. Sin embargo, el error con la creación de dos archivos también debería funcionar.
Arve
1
En algunos sistemas (FreeBSD, OS / X ...) -newerBtcoincidirá con el tiempo de nacimiento (creación) del archivo .
Stephane Chazelas
3
Tenga en cuenta que -newerxtestá disponible en FreeBSD desde 2001 (donde se proporcionó por primera vez como un parche en 1998), algunos otros BSD y GNU encuentran (desde 4.3.3 en 2007), basado en HP / UX find, que introdujo -newerXY(pero donde Y == t no es compatible).
Stephane Chazelas
Usando: find (GNU findutils) 4.4.0, esta sintaxis no funciona en SUSE ext3, si se supone que debe enumerar archivos / w mtime en esa fecha, no devuelve nada
El problema es que quiero probar para una fecha específica, no dentro de un período de tiempo.
sverrejoh
1
Así que averigua cuántos días hace y usa ese número.
jmanning2k
15
ctimeno tiene nada que ver con el tiempo de creación , es el tiempo de cambio de inodo.
Stephane Chazelas
47
Son dos pasos, pero me gusta hacerlo de esta manera:
Primero cree un archivo con una fecha / hora particular. En este caso, el archivo es 01/10/2008 a medianoche
touch -t 0810010000/tmp/t
Ahora podemos encontrar todos los archivos más nuevos o más antiguos que el archivo anterior (según la fecha de modificación del archivo. También puede usar -anewer para acceder y -cneer el estado del archivo cambiado).
find /-newer /tmp/t
find /-not -newer /tmp/t
También puede ver archivos entre ciertas fechas creando dos archivos con toque
+1 para solución a una persona mayor findque carece-newerXY
Felipe Alvarez
1
OMI, ahora mismo esta debería ser la solución aceptada. No pude hacer que -newermt se ejecute en el kernel 2.6.18-348.18.1.el5, y mucho menos en los núcleos más nuevos.
DarkForce
Lo mismo ocurre con DarkForce, la funcionalidad más reciente parece ser muy
¡Esto es lo que la mayoría de la gente quiere, pero no recibió suficientes votos positivos!
sjas
2
Esto podría no funcionar en tener unos pocos millones de archivos en un directorio.
Dennis Nolte
3
Hay efectos secundarios si el término de búsqueda grep está en el nombre del archivo.
Snorex
mywiki.wooledge.org/ParsingLs : un mejor enfoque es probablemente imprimir la fecha de creación en forma legible por máquina, tal vez con statsi no tiene find -printf.
tripleee
12
No puedes El modificador -c le indica cuándo se modificaron los permisos por última vez, -a prueba el tiempo de acceso más reciente y -m prueba el tiempo de modificación. El sistema de archivos utilizado por la mayoría de las versiones de Linux (ext3) no admite un registro de "tiempo de creación". ¡Lo siento!
De hecho, no se trata solo del tipo de sistema de archivos: no existe una interfaz de sistema para obtener dicha información, incluso si el sistema de archivos la conserva. Una de las deficiencias de Unix se remonta a los primeros días, por lo que Unix nunca despegará.
chrisdowney
1
¿Unix nunca despegará?
lucid_dreamer
8
@Max: tiene razón sobre el tiempo de creación.
Sin embargo, si se desea calcular el argumento de días transcurridos para uno de los -atime, -ctime, -mtimeparámetros, se puede utilizar la siguiente expresión
Reemplace "2008-09-24" con la fecha que desee y ELAPSED_DAYS se establecerá en la cantidad de días entre entonces y hoy. (Actualización: reste uno del resultado para alinearlo con findel redondeo de la fecha).
Entonces, para encontrar cualquier archivo modificado el 24 de septiembre de 2008, el comando sería:
find .-type f -mtime $((( $(date +%s)- $(date -d '2008-09-24'+%s))/60/60/24-1))
Esto funcionará si su versión de findno admite los -newerXYpredicados mencionados en la respuesta de @Arve:.
Respuestas:
Como señaló Max, no puede, pero verificar archivos modificados o accedidos no es tan difícil. Escribí un tutorial sobre esto, tan tarde como hoy. La esencia de la cual es usar
-newerXY
y! -newerXY
:Ejemplo: para buscar todos los archivos modificados el 7 de junio de 2007:
Para buscar todos los archivos accedidos el 29 de septiembre de 2008:
O, los archivos que tuvieron su permiso cambiado el mismo día:
Sin embargo, si no cambia los permisos en el archivo, 'c' normalmente correspondería a la fecha de creación.
fuente
-newerBt
coincidirá con el tiempo de nacimiento (creación) del archivo .-newerxt
está disponible en FreeBSD desde 2001 (donde se proporcionó por primera vez como un parche en 1998), algunos otros BSD y GNU encuentran (desde 4.3.3 en 2007), basado en HP / UX find, que introdujo-newerXY
(pero donde Y == t no es compatible).find location -ctime time_period
Ejemplos de time_period:
Hace más de 30 días:
-ctime +30
Hace menos de 30 días:
-ctime -30
Hace exactamente 30 días:
-ctime 30
fuente
ctime
no tiene nada que ver con el tiempo de creación , es el tiempo de cambio de inodo.Son dos pasos, pero me gusta hacerlo de esta manera:
Primero cree un archivo con una fecha / hora particular. En este caso, el archivo es 01/10/2008 a medianoche
Ahora podemos encontrar todos los archivos más nuevos o más antiguos que el archivo anterior (según la fecha de modificación del archivo. También puede usar -anewer para acceder y -cneer el estado del archivo cambiado).
También puede ver archivos entre ciertas fechas creando dos archivos con toque
Esto encontrará archivos entre las dos fechas y horas
fuente
find
que carece-newerXY
Podrías hacer esto:
Ejemplo:
fuente
stat
si no tienefind -printf
.No puedes El modificador -c le indica cuándo se modificaron los permisos por última vez, -a prueba el tiempo de acceso más reciente y -m prueba el tiempo de modificación. El sistema de archivos utilizado por la mayoría de las versiones de Linux (ext3) no admite un registro de "tiempo de creación". ¡Lo siento!
fuente
@Max: tiene razón sobre el tiempo de creación.
Sin embargo, si se desea calcular el argumento de días transcurridos para uno de los
-atime
,-ctime
,-mtime
parámetros, se puede utilizar la siguiente expresiónReemplace "2008-09-24" con la fecha que desee y ELAPSED_DAYS se establecerá en la cantidad de días entre entonces y hoy. (Actualización: reste uno del resultado para alinearlo con
find
el redondeo de la fecha).Entonces, para encontrar cualquier archivo modificado el 24 de septiembre de 2008, el comando sería:
Esto funcionará si su versión de
find
no admite los-newerXY
predicados mencionados en la respuesta de @Arve:.fuente
Con los modificadores -atime, -ctime y -mtime para buscar, puede acercarse a lo que desea lograr.
fuente
fuente
`ls ...`
obras, no utiliza lafind
herramienta.Encontré este script en un script que elimina todos los archivos anteriores a 14 días:
Creo que un poco "man find" adicional y buscar los parámetros -ctime / -atime etc. te ayudarán aquí.
fuente