El siguiente shell script hace la transferencia de archivos de un dia anterior conservando la fecha de creacion y permisos aun servidor remoto usando ssh sin password.
#---------------------------------------------- #!/bin/sh -x # # scp-cdrs.sh: Shell Script para la transferencia de achivos via SCP # # Created by: LCC. Domingo Varela Y. # Date: 16:35:00 27/May/09 # Modified: 16:40:40 27/May/09 # Last Modified: 18:16:40 27/May/09 # Probe: True # # Settings D_Anterior=1 Dir_Remoto=`date +%Y%m%d` Dir_Local=`date --date "$D_Anterior days ago" +%Y%m%d` HORA_LOCAL=`date` HORA_ANTERIOR=`date --date "$D_Anterior days ago"` Directory='/directorio/de/trabajo/' HOST='111.222.333.4' USER='usuario' SRC='/home/username/' DST='/directorio/destino/del/usuario/' BKP_LOG='/temp/Logs-Yesterday/bkp_log-Yesterday.log' ETIQUETA='Z-' Contador=1 Archs='tipo_de_archivo*' Cero="0" /bin/touch $BKP_LOG cd $SRC echo echo "---------- INICIO DEL PROCESO --------------" echo "Directorio de trabajo actual '$SRC' ... OK" echo "--------------------------------------------" date --date "$D_Anterior days ago" | awk '{print $2,"",$3}'>/cdrani/Logs-Yesterday/Fecha-Yesterday.txt echo "Ejecucion del Shell Script con fecha anterior ... " cat /cdrani/Logs-Yesterday/Fecha-Yesterday.txt while read mes dia do if [ $dia -le 9 ]; then ls -l $Archs | grep $mes" "$dia |cut -d ' ' -f 4- | awk '{ print $3,$4,$5,$6}'> /cdrani/Logs-Yesterday/filtro-cdr0-Yesterday.txt ls -l $Archs | grep $mes" "$dia |cut -d ' ' -f 4- | awk '{ print $3,$4,$5,$6}'>> /cdrani/Logs-Yesterday/bkp_log-Yesterday.log else ls -l $Archs | grep $mes" "$dia |cut -d ' ' -f 4- |awk '{ print $3,$4,$5,$6}' > /cdrani/Logs-Yesterday/filtro-cdr0-Yesterday.txt ls -l $Archs | grep $mes" "$dia |cut -d ' ' -f 4- |awk '{ print $3,$4,$5,$6}' >> /cdrani/Logs-Yesterday/bkp_log-Yesterday.log fi done </cdrani/Logs-Yesterday/Fecha-Yesterday.txt echo num=`wc -l /cdrani/Logs-Yesterday/filtro-cdr0-Yesterday.txt|awk '{print $1}'` echo "Existe(n) '$num' archivo(s) a transferir !!! ... OK" if [ "$num" -gt $Cero ]; then echo echo "****************************************************" echo "Hora y fecha de Inicio '$HORA_LOCAL'" echo "Para el proceso de archivos ... OK" echo "****************************************************" echo echo echo "==================================================================" echo "Mostramos el contenido del archivo (filtro-cdr0-Yesterday.txt) ... OK" echo "==================================================================" echo cat /cdrani/Logs-Yesterday/filtro-cdr0-Yesterday.txt echo sleep 1 for Archivo in `cat /cdrani/Logs-Yesterday/filtro-cdr0-Yesterday.txt | awk '{ print $4}'` do echo echo "----------------------------------------------------------" echo "Nombre del archivo a copiar es: '$Archivo' ... OK" echo echo "Copiando Archivo No. '$Contador' cuyo nombre es '$Archivo' ... OK " echo "Cambiamos los permiso del archivo '$Archivo' a -rwxrwxrwx ... OK " /bin/chmod 777 $Archivo echo echo "El archivo a Copiar es '$Archivo' con etiqueta '$ETIQUETA' ... OK" /usr/bin/scp -p $Archivo $USER@$HOST:$DST$ETIQUETA$Archivo echo echo "El Archivo etiquetado '$ETIQUETA$Archivo' ha sido transferido .... OK" echo "Listamos el contenido del directorio remoto '$DST' ... OK" /usr/bin/ssh $USER@$HOST /usr/bin/ls -l ./`basename ${ETIQUETA}${Archivo}` echo echo "Quitamos la etiqueta al archivo '$ETIQUETA$Archivo' y la dejamos como '$Archivo' ... OK" /usr/bin/ssh $USER@$HOST /usr/bin/mv ./`basename ${ETIQUETA}${Archivo}` ./`basename ${Archivo}` echo echo "Nuevamente listamos el contenido del directorio remoto '$DST' ... OK" /usr/bin/ssh $USER@$HOST /usr/bin/ls -l ./`basename ${Archivo}` sleep 1 let Contador=Contador+1 echo echo "Se mueve el archivo '$Archivo' al directorio temporal '$Directory$Dir_Local' ... OK" /bin/chmod 644 $Archivo /bin/mv $Archivo $Directory$Dir_Local echo "Eliminamos una linea del archivo (filtro-cdr0-Yesterday.txt) ... OK" /bin/sed -i '1d' /cdrani/Logs-Yesterday/filtro-cdr0-Yesterday.txt echo "----------------------------------------------------------" echo done echo "****************************************************" echo "Fin de la transferencia " echo "****************************************************" echo else echo echo "------------------------------------- ATENCION ------------------------------------------" echo "Hora y fecha actual/anterior '$HORA_LOCAL' -- '$HORA_ANTERIOR' ... OK" echo "El directorio '$SRC' contiene '$num' archivos '$Archs' que transferir con la fecha de '$HORA_ANTERIOR' ... OK" echo "-----------------------------------------------------------------------------------------" echo fi # # Fin del Shell Script #