PDA

Ver la versión completa : Dudas en bash script



ancabi
02-04-2009, 19:12
buenas, estoy haciendo un script para que copie un fichero de una maquina (mediante scp), el problema viene cuando el archivo no siempre es el mismo, sino que... por ejemplo el fichero1.bd llega a 2gb y pasa a fichero2.bd, el cual se ira llenando hasta llegar a 2gb y asi sucesivamente

yo tengo que desde el script entrar por ssh al servidor, hacer un bucle que lea el ultimo digito del fichero



fichero$num.bd


y compare cada 1 con su tamaño, cuando el tamaño sea 0, resta 1 a $num y lo guarda para que el scp lo use para copiar

yo hice esto:



num=0
archivo=0
#lee el tamaño del fichero
archivo=`du -s /home/ancabi/f$num.txt | awk '{print $1}'`
while [ $archivo=0 ]; do
#incrementa 1 a num
let num=$num+1
archivo=`du -s /home/ancabi/f$num.txt | awk '{print $1}'`
done
echo $archivo
echo $num


cuando lo ejecuto lo hace bien pero claro, antes de llegar al done, el du busca f3.txt y no lo encuentra, pasa a f4.txt y no lo encuentra y se crea un bucle infinito que incrementa num y no encuentra el fichero

pero f2.txt el tamaño es 0, por lo cual el while deberia de para pero no lo hace

intente explicarme lo mejor posible

saludos

j8k6f4v9j
02-04-2009, 20:54
Lo que necesitas es comprobar que el archivo existe. Con test puedes hacerlo.

A ver, si lo he entendido bien, dados los archivos:



$ ls .
f1.db f2.db f3.db


y siendo sus tamaños


$ du -s *
4 f1.txt
4 f2.txt
0 f3.txt


lo que quieres es copiar f2.txt ?

Salu2

j8k6f4v9j
02-04-2009, 21:23
Bueno, pues supongo que es eso lo que quieres hacer. Así que, suponiendo que tienes acceso por ssh a ambos hosts:



echo '
num=0

while [ -r \'f\'$((++num))\'.db\' ]; do
if [[ `du \'f\'$num\'.db\'|cut -f1` == 0 ]]; then
archivo=\'f\'$((--num))\'.db\'
break
fi
done

scp $archivo yo@maquina_uno:/destino
' > checker.sh

chmod +x checker.sh

scp checker yo@maquina_dos:/directorio/con/los/archivos

ssh yo@maquina_uno /directorio/con/los/archivos/checker.sh



Por supuesto no está probado :p

Salu2

ancabi
03-04-2009, 00:20
no me habria salido nunca, efectivamente quiero copiar f2.txt, asiq me imagino que estara bien con el unico problema de que la maquina que tiene los archivos es un windows, por lo tanto el checker.sh no lo puedo copiar alla para ejecutarlo no? deberia hacerlo en el batch de windows o hay alguna forma de que desde mi linux lo pueda ir ejecutando? es en LAN asiq velocidad hay...

lo siento por ese detalle que me olvide

Saludos

ancabi
06-04-2009, 01:14
al final lo hice con comando del DOS y tambien lo encare de otra manera, en vez de leer el nombre comparar el tamaño y demas, lo que hace es copiar a otra carpeta los archivos modificados ese mismo dia, por lo tanto los que ya estan completos no los copia, sino el que se va llenando y arregla el problema de que si uno en el medio del dia y empieza uno nuevo...

para que sea automatico puse %DATE% asi solo pide la fecha de cada dia, lo comprime, el bzip2 solo borra el source por lo tanto en la carpeta solo queda lo comprimido, copia por ssh al servidor y borra la carpeta, aca dejo el codigo por si sirve de algo



xcopy c:\origen\* c:\destino /d:%DATE% /y

bzip2 c:\destino\*

scp -P 8100 /cygdrive/c/destino/* [email protected]:/home/copia

del c:\destino\* /q


saludos