¿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?
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:.
Con los modificadores -atime, -ctime y -mtime para buscar, 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
`ls ...`
obras, no utiliza la find
herramienta.
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í.