¿Cómo uso el comando UNIX find
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?
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:
$ 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.
-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
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
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
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
find
que carece-newerXY
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
stat
si no tiene find -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!
@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ó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 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:
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 -newerXY
predicados mencionados en la respuesta de @Arve:.
Encontré este script en un script 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 "man find" adicional y buscar los parámetros -ctime / -atime etc. te ayudarán aquí.