• Publicidad

Comprimir en Ksh

Todo lo relacionado con lenguajes de programación distintos de Perl: PHP, Java, C++, Ruby, Python, etc.

Comprimir en Ksh

Notapor Kiloko » 2007-11-01 11:36 @525

Saludos, Perleros. Tengo el siguiente código que me comprime un montón de archivos en 3 paquetes. Todo funciona bien, pero el problema llega los días 31. Ese día no hace el proceso. ¿Alguna idea de qué es lo que esté pasando?

Saludos.

Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
#!/usr/bin/ksh

. $HOME/.profile

export COLECTORHOME=/export/home/colljvip/LatJitterLan_thread
export AYER=`date '+%y:%m:%d' | awk -F":" '{printf"20%2d%2d%2d\n",$1,$2,($3-1)}' | sed 's/ /0/g'`;
export AYER=$1

export prefix=pruebas_latencia

cd ${COLECTORHOME}/historico/data

echo ${AYER}0
gzip ${prefix}${AYER}0*
tar -cvf Tar_${AYER}0.tar  ${prefix}${AYER}0*
rm ${prefix}${AYER}0*

echo ${AYER}1
gzip ${prefix}${AYER}1*
tar -cvf Tar_${AYER}1.tar  ${prefix}${AYER}1*
rm ${prefix}${AYER}1*

echo ${AYER}2
gzip ${prefix}${AYER}2*
tar -cvf Tar_${AYER}2.tar  ${prefix}${AYER}2*
rm ${prefix}${AYER}2*

gzip *.tar

cd ${COLECTORHOME}/historico/sql
echo ${AYER}0
gzip ${prefix}${AYER}0*
tar -cvf Tar_${AYER}0.tar  ${prefix}${AYER}0*
rm ${prefix}${AYER}0*

echo ${AYER}1
gzip ${prefix}${AYER}1*
tar -cvf Tar_${AYER}1.tar  ${prefix}${AYER}1*
rm ${prefix}${AYER}1*

echo ${AYER}2
gzip ${prefix}${AYER}2*
tar -cvf Tar_${AYER}2.tar  ${prefix}${AYER}2*
rm ${prefix}${AYER}2*

gzip *.tar

echo termino
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4
:(
Nunca interrumpas a tu enemigo cuando está cometiendo un error
Napoleón Bonaparte
Avatar de Usuario
Kiloko
Perlero nuevo
Perlero nuevo
 
Mensajes: 243
Registrado: 2007-07-10 18:26 @810
Ubicación: MOnterrey NL

Publicidad

Notapor explorer » 2007-11-01 13:18 @595

El problema está en el cálculo del día de ayer cuando es primero de mes:

Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
date '+%y:%m:%d' | awk -F":" '{printf"20%2d%2d%2d\n",$1,$2,($3-1)}' | sed 's/ /0/g' # 20071100
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Es decir, pone la cifra del día a 0.

Lo mejor es usar una versión moderna del comando date:
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
date -d yesterday  +'%Y%m%d' # 20071031
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Esto es muy cómodo: con la palabra inglesa 'yesterday' no tenemos que preocuparnos de hacer cuentas de qué día puede ser. Y solo queda elegir un formato adecuado a la salida que esperamos.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor Kiloko » 2007-11-01 14:14 @634

Excelente.

Solo me confunde esta parte:
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
| sed 's/ /0/g
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

con el yesterday, ¿no afectaría?

Entonces podría quedar así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
date -d yesterday  +'%Y%m%d' # 20071031  | awk -F":" '{printf"20%2d%2d%2d\n",$1,$2,($3-1)}' | sed 's/ /0/g'
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Nunca interrumpas a tu enemigo cuando está cometiendo un error
Napoleón Bonaparte
Avatar de Usuario
Kiloko
Perlero nuevo
Perlero nuevo
 
Mensajes: 243
Registrado: 2007-07-10 18:26 @810
Ubicación: MOnterrey NL

Notapor explorer » 2007-11-01 14:46 @657

Que no, que has entendido la sintaxis de ksh... que lo que empieza por '#' es un comentario... he puesto las fechas que salen en forma de comentario para que veas qué es lo que sale.

De la página de manual de ksh:
Código: Seleccionar todo
  Comments.
       A word beginning with # causes that word and all the following characters up to a new-line to be ignored.


Y sobre el 'sed': sobra. Con el comando date, vale.

Hay que leer un poquito más, ¿eh? :?

Actualización: he editado tu mensaje anterior y he cambiado las etiquetas de código a la de sintasix bash, que es la más parecida a la de ksh. Como verás, el efecto del '#' es brutal: todo lo que sigue es un comentario, incluido el comando awk y el sed.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor Kiloko » 2007-11-01 16:23 @724

Ok, así quedaría:

Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
export AYER= `date -d yesterday '+%Y%m%d'| awk -F":" '{printf"20%2d%2d%2d\n",$1,$2,($3-1)}' | sed 's/ /0/g'`;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Pero me manda un Warning.

Código: Seleccionar todo
date: illegal option -- d                                                                                               
usage:  date [-u] mmddHHMM[[cc]yy][.SS]
        date [-u] [+format]
        date -a [-]sss[.fff]

:?
Esto era lo que no comprendía, error mio no era el # si no esta parte, creo que no me supe dar a entender...
Comentario: No jalan, por la versión, rayos

Se supone que AYER va a ser igual al día de ayer, por lo tanto si yo a AYER le pongo igual a 20071031, ¿esa es la fecha que tomaría, verdad?
Nunca interrumpas a tu enemigo cuando está cometiendo un error
Napoleón Bonaparte
Avatar de Usuario
Kiloko
Perlero nuevo
Perlero nuevo
 
Mensajes: 243
Registrado: 2007-07-10 18:26 @810
Ubicación: MOnterrey NL

Notapor explorer » 2007-11-01 17:11 @758

Con lo fácil que es hacerlo en Perl... :-)

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
use POSIX;
$AYER = strftime("%Y%m%d", localtime(time - 86400));
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor Kiloko » 2007-11-01 17:22 @765

Sabes voy a proponer, una carita que esté llorando para poder insertarla en el foro... jajajajajaja Para qué me la complico, un programa en Perl y vámonos... Ok, deja, checo cuáles son los módulos para comprimir...
:wink:
Nunca interrumpas a tu enemigo cuando está cometiendo un error
Napoleón Bonaparte
Avatar de Usuario
Kiloko
Perlero nuevo
Perlero nuevo
 
Mensajes: 243
Registrado: 2007-07-10 18:26 @810
Ubicación: MOnterrey NL

Notapor Kiloko » 2007-11-01 18:22 @807

Una pregunta rápida, para solucionar el problema en lo que armo el script en Perl.
Quiero comprimir X número de archivos (más de 5 mil) que comienzan con:
Código: Seleccionar todo
pruebas_latencia200710310000000.sql.gz

Los 000000 son datos. Según yo, un comodín para suplir esos ceros, es (*) y que todo eso me lo guarde en un archivo que diga Tar_200710310.tar y así segmentarlo en 3 bloques: 0,1,2.

Código: Seleccionar todo
gzip pruebas_latencia200710310* tar -cvf Tar_200710310.tar
gzip pruebas_latencia200710311* tar -cvf Tar_200710312.tar
gzip pruebas_latencia200710312* tar -cvf Tar_200710312.tar


Pero me manda el mensaje:
Código: Seleccionar todo
bash: /bin/gzip: Listado de argumentos demasiado largo


¿Qué me recomiendan hacer en estos casos?
Nunca interrumpas a tu enemigo cuando está cometiendo un error
Napoleón Bonaparte
Avatar de Usuario
Kiloko
Perlero nuevo
Perlero nuevo
 
Mensajes: 243
Registrado: 2007-07-10 18:26 @810
Ubicación: MOnterrey NL

Notapor explorer » 2007-11-01 18:34 @815

El error del shell se debe a que por efecto del comodín, ha intentado poner miles de ficheros en la línea de comandos ANTES de ejecutar gzip.

En esos casos es mejor usar un bucle.

Otra cosa... en las versiones modernas de tar se puede hacer que comprima en gzip mientras va añadiendo ficheros. Así que
Código: Seleccionar todo
gzip pruebas_latencia200710310* tar -cvf Tar_200710310.tar
se puede convertir en
Código: Seleccionar todo
tar czvf Tar_200710310.tgz pruebas_latencia200710310*
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor Kiloko » 2007-11-01 19:22 @849

mm No, de plano no jaló. Por cierto, mencioné que los archivos que quiero comprimir están ya comprimidos, jajajajajaja qué show, bueno habrá que hacerlo en Perl.

¿Qué me recomiendan, para que al final el archivo diga, archivo.tar.gz?

Saludos
Nunca interrumpas a tu enemigo cuando está cometiendo un error
Napoleón Bonaparte
Avatar de Usuario
Kiloko
Perlero nuevo
Perlero nuevo
 
Mensajes: 243
Registrado: 2007-07-10 18:26 @810
Ubicación: MOnterrey NL

Siguiente

Volver a Programación en general

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 3 invitados