¿Cómo usar ‘buscar’ para buscar archivos creados en una fecha específica?

¿Cómo uso el comando UNIX find para buscar archivos creados en una fecha específica?

Como señaló Max, no se puede, pero revisar los archivos modificados o acceder no es tan difícil. Escribí un tutorial sobre esto, tan tarde como hoy. La esencia de lo cual es usar -newerXY y ! -newerXY ! -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 encontrar todos los archivos accedidos el 29 de septiembre de 2008:

 $ find . -type f -newerat 2008-09-29 ! -newerat 2008-09-30 

O bien, archivos que tuvieron su permiso cambiado el mismo día:

 $ find . -type f -newerct 2008-09-29 ! -newerct 2008-09-30 

Si no cambia los permisos en el archivo, ‘c’ normalmente correspondería a la fecha de creación.

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

Son dos pasos, pero me gusta hacerlo de esta manera:

Primero crea un archivo con una fecha / hora particular. En este caso, el archivo es 2008-10-01 a la medianoche

 touch -t 0810010000 /tmp/t 

Ahora podemos encontrar todos los archivos que son más nuevos o más antiguos que el archivo anterior (pasando por la fecha de modificación del archivo. También puede usar -anewer para acceder y -cnewer 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

 touch -t 0810010000 /tmp/t1 touch -t 0810011000 /tmp/t2 

Esto encontrará archivos entre las dos fechas y horas

 find / -newer /tmp/t1 -and -not -newer /tmp/t2 

Podrías hacer esto:

 find ./ -type f -ls |grep '10 Sep' 

Ejemplo:

 [root@pbx etc]# find /var/ -type f -ls | grep "Dec 24" 791235 4 -rw-r--r-- 1 root root 29 Dec 24 03:24 /var/lib/prelink/full 798227 288 -rw-r--r-- 1 root root 292323 Dec 24 23:53 /var/log/sa/sar24 797244 320 -rw-r--r-- 1 root root 321300 Dec 24 23:50 /var/log/sa/sa24 

No puedes. El modificador -c le indica cuándo se modificaron por última vez los permisos, -a prueba la hora de acceso más reciente y -m prueba la hora de modificación. El sistema de archivos utilizado por la mayoría de los sabores de Linux (ext3) no admite un registro de “tiempo de creación”. ¡Lo siento!

@Max: tiene razón sobre el tiempo de creación.

Sin embargo, si desea calcular el argumento de los días transcurridos para uno de los -atime , -ctime , -mtime , puede usar la siguiente expresión

 ELAPSED_DAYS=$(( ( $(date +%s) - $(date -d '2008-09-24' +%s) ) / 60 / 60 / 24 - 1 )) 

Reemplace “2008-09-24” con la fecha que desee y ELAPSED_DAYS se establecerá en la cantidad de días entre ese día y hoy. (Actualización: reste uno del resultado para alinearlo con el redondeo de fecha de find ).

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 find no admite los predicados -newerXY mencionados en la respuesta de @Arve :.

Con los conmutadores -atime, -ctime y -mtime para encontrar, puede acercarse a lo que desea lograr.

 cp `ls -ltr | grep 'Jun 14' | perl -wne 's/^.*\s+(\S+)$/$1/; print $1 . "\n";'` /some_destination_dir 

Encontré este scriplet en una secuencia de comandos que elimina todos los archivos anteriores a 14 días:

 CNT=0 for i in $(find -type f -ctime +14); do ((CNT = CNT + 1)) echo -n "." >> $PROGRESS rm -f $i done echo deleted $CNT files, done at $(date "+%H:%M:%S") >> $LOG 

Creo que un poco de “encontrar al hombre” adicional y buscar los parámetros -tiempo / -tiempo etc. te ayudarán aquí.