No olvides que en la informática un error suele tener diversas resoluciones, pero mostraremos la mejor y más eficiente.
Solución:
podrías usar rsync
(encima ssh
), que utiliza una única conexión para transferir todos los archivos de origen.
rsync -avP cap_* [email protected]:dir
si no tienes rsync
(¿¡y por qué no!?) puedes usar tar
con ssh
así, que evita crear un archivo temporal (estas dos alternativas son equivalentes):
tar czf - cap_* | ssh [email protected] tar xvzfC - dir
tar cf - cap_* | gzip | ssh [email protected] 'cd dir && gzip -d | tar xvf -'
El rsync
es preferible, en igualdad de condiciones, porque se puede reiniciar en caso de una interrupción.
El comentario de @wurtel probablemente sea correcto: hay muchos gastos generales para establecer cada conexión. Si puede arreglar eso, obtendrá transferencias más rápidas (y si no puede, simplemente use el de @roaima rsync
solución alterna). Hice un experimento transfiriendo archivos de tamaño similar (head -c 417K /dev/urandom > foo.1
e hice algunas copias de ese archivo) a un host que tarda un poco en conectarse (HOST4) y uno que responde muy rápido (HOST1):
$ time ssh $HOST1 echo
real 0m0.146s
user 0m0.016s
sys 0m0.008s
$ time scp * $HOST1:
foo.1 100% 417KB 417.0KB/s 00:00
foo.2 100% 417KB 417.0KB/s 00:00
foo.3 100% 417KB 417.0KB/s 00:00
foo.4 100% 417KB 417.0KB/s 00:00
foo.5 100% 417KB 417.0KB/s 00:00
real 0m0.337s
user 0m0.032s
sys 0m0.016s
$ time ssh $HOST4 echo
real 0m1.369s
user 0m0.020s
sys 0m0.016s
$ time scp * $HOST4:
foo.1 100% 417KB 417.0KB/s 00:00
foo.2 100% 417KB 417.0KB/s 00:00
foo.3 100% 417KB 417.0KB/s 00:00
foo.4 100% 417KB 417.0KB/s 00:00
foo.5 100% 417KB 417.0KB/s 00:00
real 0m6.489s
user 0m0.052s
sys 0m0.020s
$
Es la negociación del traspaso lo que lleva tiempo. En general, las operaciones de norte archivos de B bytes cada uno toma mucho, mucho más que una sola operación en un solo archivo de norte * B bytes Esto es también true por ejemplo, para E/S de disco.
Si te fijas bien verás que la tasa de transferencia en este caso es tamaño_del_archivo/seg.
Para transferir archivos de manera más eficiente, agréguelos con tar
, luego transfiera el tarball:
tar cvf myarchive.tar cap_20151023T*.png
o, si también desea comprimir el archivo,
tar cvzf myarchive.tar.gz myfile*
Ya sea para comprimir o no depende del contenido del archivo, por ejemplo. si son JPEG o PNG, la compresión no tendrá ningún efecto.
Comentarios y valoraciones del tutorial
Nos encantaría que puedieras dar recomendación a esta crónica si te fue útil.