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

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



2015-07-13 16:09 GMT+02:00 Camaleón <noelamac@gmail.com>:
> 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,

Si quieres ahorrar espacio en disco, el cat también va con los ficheros .gz:

Una vez que tengas el fichero del mes comprimido con gzip
example.com_${mes}_access_log, y suponiendo que no te interesa
comprimir el fichero diario:

cat example.com_${dia} | gzip >> example.com_${mes}_access_log.gz

O si es un linux moderno, en vez gzip con xz que comprime más los
ficheros de texto, creo ...

Saludos


Reply to: