Me explico mejor, el siguiente archivo: mi_archivo_20100805.gz, debía llamarse en realidad: mi_archivo_20100804.gz, como pueden ver debía restar 1 al día que era impreso como fecha y cambiar el nombre de cada archivo.
Inicialmente ataqué el problema con AWK, pero me di por vencido cuando me enfrenté a los archivos con día 01, no podía colocar día 00, debía ser el último día del mes anterior y con esto, otro de los más grandes problemas... Qué mes? año bisiesto? etc, etc...
Entonces, obviamente necesitaba de algún lenguaje de programación que me permitiera hacer operaciones aritméticas con fechas, por ejemplo: PHP.
Aquí les dejo el script que creé, espero sea de utilidad para alguien:
# file: replace_name_-1day.sh #!/bin/bash if [ $# -lt 3 ] # validating parameters then echo "Usage: replace_name_-1day.sh prefix date dir" echo "date - must be in Y-m-d format" exit fi prefix=$1 date=$2 dir=$3 fDate=`echo '<?php $date = "'$date'"; $dateTime = new DateTime($date); echo $dateTime->format("Ymd"); ?>' | php` # file actual date fNewDate=`echo '<?php $date = "'$date' - 1 day"; $dateTime = new DateTime($date); echo $dateTime->format("Ymd"); ?>' | php` # file new date mv $dir/$prefix\_$fDate.xml.gz $dir/$prefix\_$fNewDate.xml.gz
Para correr esto pueden seguir el siguiente ejemplo:
$ date=`date +%Y-%m-%d` # sets today's date in format YYYYMMDD $ dateFile=`date +%Y%m%d` # sets today's date in format YYYY-MM-DD $ touch mio_$dateFile.gz # generates an empy file with the specified name $ ./replace_name_-1day.sh mio $date dir
Se preguntarán por qué manejar la fecha con diferentes formatos (20100805 ó 2010-08-05), pues resulta que es un parámetro que necesita otro programa que no está en este artículo...
No hay comentarios:
Publicar un comentario