Showing posts with label scripting. Show all posts
Showing posts with label scripting. Show all posts

Wednesday, October 2, 2013

BASH: Buscar el día anterior al día provisto.

Este pequeño "if" es muy útil. El mismo calcula el día anterior de la fecha provista (formato YYYYmmDD) y si no se le provee ninguna automáticamente le asigna el día de hoy y el de ayer a las variables pertinentes.


#!/bin/bash

#Si el parametro $1 NO viene vacio
if [ ${#1} != 0 ]
then
        #Entonces TIMESTAMP es igual al valor de $1
        TIMESTAMP=$1

        #ONEDAYBEFORE es un dia antes del dia provisto
        ONEDAYBEFORE=$(date -d "$1 - 1 day" "+%Y%m%d")
else
        #De lo contrario TIMESTAMP sera el dia de hoy
        TIMESTAMP=`date +"%Y%m%d"`
        
        #ONEDAYBEFORE sera el dia de ayer
        ONEDAYBEFORE=`date --date="yesterday" "+%Y%m%d"`
fi

Utilidad:
Supongamos que diariamente tienes que generar un reporte que compare el día de ayer con el de hoy. La ventaja que provee este if es la flexibilidad de poder ejecutar este script tanto manual como automáticamente, osea, puedes ponerle una fecha en el pasado y obtendrá el día anterior al provisto.

Monday, June 3, 2013

BASH: Como encontrar el primer y último día del mes anterior.

Hoy tuve que hacer un script para generar un reporte que contenga información del mes pasado completo. 

Para encontrar el primer día del mes pasado utlizamos este comando:


$ date -d "$(date -d `date +%Y-%m-%d` +%Y-%m-01) -1 month" +%Y-%m-%d
2013-05-01 
Para encontrar el último día del mes pasado utlizamos este:


$ date -d "$(date -d `date +%Y-%m-%d` +%Y-%m-01) -1 day" +%Y-%m-%d
2013-05-31 
Si deseas hacerlo para el mes corriente seria de la siguiente manera:

$ date -d `date +%Y-%m-%d` +%Y-%m-01
2013-06-01
$ date -d "$(date -d `date +%Y-%m-%d` +%Y-%m-01) +1 month -1 day" +%Y-%m-%d
2013-06-30
*Esto fue probadocon BASH shell en RedHat 6

Thursday, December 20, 2012

Script: Como borrar archivos de diferentes directorios mas viejos de cierta fecha.

Este script es sencillo pero muy útil. Para ahorrar espacio en el servidor necesito borrar todos los archivos de hace más de 3 dias en diferentes directorios, diariamente.

Este script me permite hacer esto automáticamente.


#!/bin/bash
PATHS="/path/to/dir1 /path/to/dir2 /path/to/dir3" 
find $PATHS -mtime +3 -ls -exec rm {} \; 

En la variable $PATH ponemos todos los directorios que deseamos limpiar separados por un espacio. Luego el comando find se encargara de ir directorio por directorio listando (-ls) todos los archivos mayores de tres dias (-mtime +3). El resultado de ese ls (los nombres de nuestros archivos) serán eliminados por -exec rm{}.

Puedes modificar el tiempo de acuerdo a tu necesidad, por ejemplo -mtime +0 eliminaria todos los archivos que no sean del dia corriente.

Wednesday, December 12, 2012

Script: Automatizar envio de archivos por FTP

"Si tienes que hacer una tarea más de una vez, haz un script".  

Aqui verás un ejemplo de Shell Script que envía por FTP todos los archivos del día de hoy  encontrados en una carpeta en específico.

#!/bin/sh

#IP donde te quieres conectar
HOST='192.168.0.10'

#Usuario de conexion
USER='ftpuser'

#Contrasena del usuario
PASSWD='ftppass'

#Path donde quieres buscar los archivos
PATH='/home/ftpuser/reports'

#Path donde los depositaras
DESTINATION='/destinationserver/destinationfolder'


#Busca todos los archivos en $PATH donde la fecha de modificacion (-ctime) sea# 0 = hoy. Por cada archivo que encuentres (while read LINE).
#Conectate al host y deposita el archivo (put $LINE)

find $PATH -type f -ctime 0 | while read LINE  
do
        ftp -n $HOST <<END_SCRIPT
        quote USER $USER
        quote PASS $PASSWD
        cd $DESTINATION
        put $LINE
        quit
END_SCRIPT
done
Recuerda ajustar los niveles de seguridad del script de acuerdo a tu necesidad y ponerlo en tu crontab.