bash - una - mover archivos por fecha linux
¿Cómo usar ''buscar'' para buscar archivos creados en una fecha específica? (9)
@Max: tiene razón sobre el tiempo de creación.
Sin embargo, si desea calcular el argumento de 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 el número de días entre ese momento y hoy. (Actualización: reste uno del resultado para alinearlo con el redondeo de la 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 :.
¿Cómo uso el comando de búsqueda de UNIX para buscar archivos creados en una fecha específica?
Como lo señaló Max, no puede, pero verificar los archivos modificados o accedidos no es tan difícil. Escribí un tutorial sobre esto, tan tarde como hoy. La esencia de eso es usar -newerXY
y ! -newerXY
! -newerXY
:
Ejemplo: para encontrar 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
Sin embargo, si no cambia los permisos en el archivo, ''c'' normalmente correspondería a la fecha de creación.
Con los interruptores -atime, -ctime y -mtime para buscar, puede acercarse a lo que quiere lograr.
Encontré este script 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 "búsqueda de hombre" adicional y la búsqueda de los parámetros -ctime / -atime etc. te ayudarán aquí.
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
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 el 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 (va por la fecha de modificación del archivo. También puede usar -ewer para el estado de archivo accedido y -cnewer cambiado).
find / -newer /tmp/t
find / -not -newer /tmp/t
También puede mirar 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
Usted no puede El modificador -c le dice 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!
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
cp `ls -ltr | grep ''Jun 14'' | perl -wne ''s/^.*/s+(/S+)$/$1/; print $1 . "/n";''` /some_destination_dir