[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

(duda resuelta) Re: Duda sobre el comportamiento de "cat"



El Sun, 12 Jul 2015 23:10:23 +0200, Javier Barroso escribió:

> 2015-07-12 22:27 GMT+02:00 Camaleón <noelamac@gmail.com>:
>> El Sun, 12 Jul 2015 20:26:07 +0200, Manolo Díaz escribió:

(...)

>>> Yo no culparía a cat. find no devuelve los ficheros en orden
>>> alfabético, si hay varios ficheros creados hace menos de un día puede
>>> ocurrir que termine volcando uno más reciente antes que otro más
>>> antiguo.
>>
>> Sí, eso había pensado también pero en el directorio "/logs" no hay
>> ningún archivo que pueda encontrar el find, es decir, ahora, a las
>> 22:26 (y todos los días cuando se ejecuta la tarea) sólo está:
>>
>> /logs/example.com_201507_access_log.txt

(...)

> Si es sólo un día, podrías usar el siguiente snip de base:
> mes=$(date +'%Y%m' -d '-1 day');
> dia=$(date +'%Y%m%d' -d '-1 day') ;
> cat example.com.${dia} >> example.com_${mes}_access_log.txt
> 
> Con un bucle ya tendrías para todos los dominios

Aunque hoy el script se ha ejecutado correctamente y no ha alterado el 
orden del contenido del archivo mensual (los datos del registro del día 
12/07/2015 los ha añadido al final) he decidido dejarlo como dices, es 
decir, he prescindido del "find" y he optado por "cat" porque me parece 
que al querer afinar la selección del archivo (cuando realmente el 
script sólo va a trabajar con uno y resulta sencillo seleccionarlo por 
su nombre) me complica la vida más que me la soluciona.

Al hacer las pruebas directamente desde una sesión ssh en el servidor, 
me he dado cuenta de que el comando "find" devuelve los resultados como 
le da la real gana (como decía Manolo), es decir:

find logs/archive -maxdepth 1 -type f -name "example.com.*"

logs/archive/example.com.20150711
logs/archive/example.com.20150708
logs/archive/example.com.20150707
logs/archive/example.com.20150710
logs/archive/example.com.20150709

La única explicación lógica que le veo al hecho de que el "cat >>" haya 
agregado el contenido del archivo 20150710 antes del 20150709 es que al 
estar haciendo pruebas se haya podido ejecutar la tarea del cron (bien 
automáticamente o bien haciéndolo yo manualmente al estar probando los 
scripts) estando esos dos archivos en el mismo directorio, es decir:

logs/example.com.20150710
logs/example.com.20150709

Y al usar el modificador "-ctime -1" en "find" se hayan seleccionado esos 
dos archivos (en este caso "-mtime -1" hubiera sido lo correcto).

Hoy, como sólo había un único archivo en el directorio de "logs" no ha 
habido problemas pero si quiero usar "find" con ciertas garantías tendría 
que asegurarme de dos cosas:

1/ Que devuelva los archivos ordenados por nombre (?)
2/ Que use la opción "-mtime"

He estado haciendo pruebas para dar con una instrucción que me permita usar 
el combinado find + sort + cat + mv pero no he dado con la tecla (se admiten 
sugerencias ;-)) así que me quedo con el simple cat + mv y a correr.

Saludos y gracias a los dos por las ideas,

-- 
Camaleón


Reply to: