ScriptUpdateNod32

Forums: 

Hola panas, un saludo y buen dia para todos...

Aqui les traigo un fragmento de un script el cual descarga la actualizacion del nod32 version 2.7 dicha version no permite ser descargada por wget -A.nup,.ver debido a esto hay que descargar el update.ver y filtrarlo para hacer la descarga mas comoda, hasta ahi todo va bien... pero deseo lograr algo mas optimo en cuanto al Ancho de Banda y es que deseo mantener la funcionalidad -m del wget (mirror) para que no descarge nuevamente los archivos existentes y al mismo tiempo borrar los obsoletos...

Fragmento del Script

wget -m -nd -P$DirNOD/update $BaseNOD/update.ver
grep file $DirNOD/update/update.ver | grep -v xml | cut -d = -f 2 | cut -d . -f 1 > $DirNOD/update/lista
for i in $(cat $DirNOD/update/lista);
do
wget -m -nd -P$DirNOD/update -o $DirNOD/update.log $BaseNOD/$i.nup
done

Objetivo
Borrar todos los archivos menos los que estan en $DirNOD/update/lista

Un saludo...

Si la lista de archivos no es

Imagen de deathUser

Si la lista de archivos no es muy grande haría algo como:


find $DirNOD -type f -exec borra_archivo {} $DirNOD/update/lista \;

donde borra_archivo contiene algo como:


#!/bin/bash
FLAG=`grep -c $1 $2`
if [ "${FLAG}" -neq "0" ]; then
rm -f $1
fi

Si $DirNOD/update/lista es muy grande se pondrá lento, ya que lo consulta un montón de veces ...

Suerte ...

bye
;)

Re:Script

Pana, tengo problemas al acoplarlo al script


line 13: syntax error: unexpected end of file
find: «borra_archivo»: No existe el fichero o el directorio

Aqui muestro la parte completa del script para nod32

BaseNOD=http://upgradenod.mic.cu
DirNOD=/home/www/ftp/antivirus/nod32
wget -m -nd -P$DirNOD/update $BaseNOD/update.ver
grep file $DirNOD/update/update.ver | grep -v xml | cut -d = -f 2 | cut -d . -f 1 > $DirNOD/update/lista
for i in $(cat $DirNOD/update/lista);
do
wget -m -nd -P$DirNOD/update -o $DirNOD/update.log $BaseNOD/$i.nup
find $DirNOD/update -type f -exec $DirNOD/borra_archivo {} $DirNOD/update/lista \;

Esto es lo que contiene la "lista"

nod6D0D
nod794D
nod3C4E
nod6A69
nod4FC2
nod2AD2
nod59AE
nod4401
nod172A
nod6768
nod2A3C
nod6148
nod0EAA
nod4572
nod416F
nod5FDA
nod07CE
nod1405
nod5390
nod1ABC
nod25D3
nod6CF5
nod579A
nod1BEF
nod0C13
nod65AE
nod186E
nod7CEE
nod6F50
nod05CB
nod303F
nod2236
nod3B92
nod7475
nod1914
nod3855
nod2F25
nod7421
nod0674
nod68B6
nod1344
nod6648
nod32CF
nod351C
nod515D
nod7DC8
nod1BE2
nod7D3A
nod4345
nod302E
nod38AE
nod0C1D
nod14B9
nod17C0
nod40D5
nod3A3F
nod12D7
nod5545
nod2CA7
nod786F
nod5472
nod0473
nod1B7D
nod5A20
nod7F1D
nod1573
nod329A
nod0577
nod6489
nod75B2
nod7805
nod11F6
nod3BBC
nod6172
nod39FD
nod2061
nod458F
nod7F0F
nod1AFB
nod26A2

Salud2s...

ecualug
______________________
!!!AdminRed_Debian!!!

bueno, te cuento que lo

Imagen de deathUser

bueno, te cuento que lo escribí directo en ECUALUG, así que el parser de mi brain fue el que no detectó algunos peques errores, prueba con:

borra_archivo

#!/bin/bash
FILE=`basename $1`
FLAG=`grep -c ${FILE} $2`
if [ "${FLAG}" == "0" ]; then
rm -f $1
fi

El find le pasa todo el PATH al script, así que no lo encuentra en la lista que solo tiene los nombres, recuerda incluir a "lista" en la lista, si no, lo borra y falla ;)

Suerte ...

bye
;)

Da unos lios que pa que

:D Da unos lios que pa que contar.. GG
Pues como el script borra_archivo debe borrar todo lo que esta en update y solo dejar los que estan en la lista, cambie el distino del archivo lista y update.ver, para ver si no se borran y asi lo copio despues, pero a pesar de eso limpia la carpeta update... la deja vacia... :?

###PUSE EL FIND *** AL PRINCIPIO SOLO PARA PROBAR ####

ScriptAct

find $DirNOD/update -type f -exec $DirNOD/borra_archivo {} $DirNOD/lista \;
wget -m -nd -P$DirNOD $BaseNOD/update.ver
grep file $DirNOD/update.ver | grep -v xml | cut -d = -f 2 | cut -d . -f 1 > $DirNOD/lista
for i in $(cat $DirNOD/lista);
do
wget -m -nd -P$DirNOD/update -o $DirNOD/update.log $BaseNOD/$i.nup
done
cp $BaseNOD/update.ver $DirNOD/update

*** Un detalle por si... el archivo lista al final siempre tiene un -Enter-
Veremos si sale aca ***

Salud2s... GG

ecualug
______________________
!!!AdminRed_Debian!!!

lista existe al inicio, antes

Imagen de deathUser

lista existe al inicio, antes de ejecutar el wget y el grep del update.ver ...???

recuerda que el find te retorna una lista de todos los archivos existentes en el directorio $DirNOD/update y el script borra_archivo busca cada uno de ellos en la lista $DirNOD/lista, si no existe lo borra, es decir, si la lista está vacía, borra_archivo borrará todos los archivos pasados como parámetro ...

puedes agregar echos en borra_archivo, para que veas que es lo que está haciendo, por ejemplo en lugar de ejecutar el grep, puedes hacer algo como:

archivo: borra_archivo

#!/bin/bash
FILE=`basename $1`
echo "grep -c ${FILE} $2"
FLAG=`grep -c ${FILE} $2`
if [ "${FLAG}" == "0" ]; then
echo "rm -f $1"
else
echo "no borrar FLAG=${FLAG}"
fi

Ahí vas a ver que es lo que está haciendo el script, claro que sin borrar nada ;)

Suerte ...

bye
;)

Solucionado

Hola a todos, y que tengan un buen dia...
Aqui les muestro el script completo junto a otro, espero que les sea util a los que necesiten bajar las actualizaciones del nod32 en Linux...

Si pueden mejorarlo, pues bienvenido...

1er Script

BaseNOD="http://upgradenod.mic.cu"
DirNOD="/home/www/ftp/antivirus/nod32"
wget -np -m -nd -P$DirNOD/update -o $DirNOD/update.log $BaseNOD/update.ver
cat $DirNOD/update/update.ver | grep file | cut -b6-> $DirNOD/lista
echo "update.ver" >> $DirNOD/lista
xml=$(cat $DirNOD/update/update.ver | grep file | cut -b6- | grep -v nup | cut -d . -f 1)
nup=$(cat $DirNOD/update/update.ver | grep file | cut -b6- | grep -v xml | cut -d . -f 1)
for files in $xml;
do
wget -np -m -nd -P$DirNOD/update -o $DirNOD/update.log "$BaseNOD/$files.xml"
done
for files in $nup;
do
wget -np -m -nd -P$DirNOD/update -o $DirNOD/update.log "$BaseNOD/$files.nup"
done
find $DirNOD/update -type f -exec greprm {} $DirNOD/lista \;
rm $DirNOD/zips/UpdateNod32.zip
zip -9 -j $DirNOD/zips/UpdateNod32.zip $DirNOD/update/*

2do Script
Para el correcto funcionamiento de este, necesitan instalar el DOS2UNIX...
aptitude install tofrodos

SERVER="http://upgradenod.mic.cu";
UPDATE="/var/www/update" #Carpeta de destino
MIRROR="/var/www/nod32" #Carpeta espejo, la que se publica
WGET=$(which wget) || exit 1
WGETOPT="--no-parent -m -nd -P" || exit 1
CAT=$(which cat) || exit 1
CUT=$(which cut) || exit 1
DOS2UNIX=$(which dos2unix) || exit 1
ECHO=$(which echo) || exit 1
GREP=$(which grep) || exit 1
MKDIR=$(which mkdir) || exit 1
MV=$(which mv) || exit 1
RM=$(which rm) || exit 1
SED=$(which sed) || exit 1
BAJAR0=$(mktemp) || exit 2
BAJAR1=$(mktemp) || exit 2
$WGET $WGETOPT $UPDATE $SERVER/update.ver
cd $UPDATE
$SED 11,50d update.ver>$BAJAR0
$SED 21,30d $BAJAR0>$BAJAR1
$RM -f $BAJAR0
$SED 31,70d $BAJAR1>$BAJAR0
$RM -f $BAJAR1
$SED 41,50d $BAJAR0>$BAJAR1
$RM -f $BAJAR0
$SED 51,90d $BAJAR1>$BAJAR0
$RM -f $BAJAR1
$SED 61,70d $BAJAR0>$BAJAR1
$RM -f $BAJAR0
$SED 71,110d $BAJAR1>$BAJAR0
$RM -f $BAJAR1
$SED 81,90d $BAJAR0>$BAJAR1
$RM -f $BAJAR0
$SED 91,130d $BAJAR1>$BAJAR0
$RM -f $BAJAR1
$SED 101,110d $BAJAR0>$BAJAR1
$RM -f $BAJAR0
$SED 101,370d $BAJAR1>$BAJAR0
$RM -f $BAJAR1
$DOS2UNIX $BAJAR0
$CAT $BAJAR0>$MIRROR/update.ver
$CAT $BAJAR0 | $GREP file | $CUT -b6-> $BAJAR1
BAJAR=$(cat $BAJAR1)
for i in $BAJAR
do
wget $WGETOPT $MIRROR "$SERVER/$i"
if [ -e $MIRROR/$i ];
then
$MV $MIRROR/$i $UPDATE/$i
fi
done
$RM -f $MIRROR/*.nup
$RM -f $MIRROR/*.xml
$RM -f $BAJAR0
$RM -f $BAJAR1
$RM -f $UPDATE/*.ver
$MV -f $UPDATE/*.nup $MIRROR
$MV -f $UPDATE/*.xml $MIRROR
exit 0

Salud2s...

ecualug
______________________
!!!AdminRed_Debian!!!

Páginas