La forma más sencilla es ejecutando un system().
Como dices que quieres usar un system(), te vale con poner en él lo que ejecutarías si estuvieras en la línea de comandos.
Yo, por ejemplo, no tengo un programa Perl para hacer las copias, sino que me vale con poner las siguientes líneas en un
script bash:
Using bash Syntax Highlighting
#!/bin/bash
cd /var/home || exit
rsync -avz --skip-compress="zip,tgz,gz,bz2" --del -e ssh --bwlimit=5000 root@....net:/var/home/ .
Coloreado en 0.008 segundos, usando
GeSHi 1.0.8.4
Entre las máquinas origen y destino, he intercambiado anteriormente claves públicas, para que el protocolo ssh se ejecute sin que pide usuarios/contraseñas.
Lo que hace el script es entrar primero en el directorio /var/home local. Si no puede (por cualquier razón), termina el
script inmediatamente. Luego arranca el rsync, con una serie de opciones, que son:
- -a: activa el modo "archivo" que equivale a activar las opciones -rlptgoD, que son:
- -r: recursivo
- -l: copia los enlaces simbólicos como enlaces simbólicos
- -p: preserva los permisos
- -t: preserva los tiempos de modificación de los archivos
- -g: preserva el grupo
- -o: preserva el usuario
- -D: lo mismo que activar las opciones --devices (preserva los archivos de dispositivos) y --specials (preserva los archivos especiales)
- -v: aumenta la verbosidad
- -z: comprime los datos mientras los transfiere
- --skip-compress="zip,tgz,gz,bz2": extensiones de los archivos que no serán comprimidos
- --del: lo mismo que --delete-during: se borran los archivos en el destino durante la transferencia
- -e ssh: especifica el comando remoto a ejecutar
- --bwlimit=5000: limita el ancho de banda a transferir a 5 MB/s
- [email protected]:/var/home/ :nombre de usuario, servidor remoto y ruta remota. La barra final es importante
- . : ruta destino (en este caso, el directorio padre, que es lo mismo que decir, "aquí mismo")
Lo que hace rsync es conectarse al servidor remoto y sincronizar los archivos remotos con los locales. Si algún archivo remoto ha desaparecido desde la última vez, también será borrado en local.
Hay otras formas de trabajar con rsync. Por ejemplo, haciéndolo correr como dæmon en una de las máquinas, y conectarse a él desde la otra máquina, como un cliente.
No he visto los módulos de Perl en CPAN, pero seguro que serán para simplificar un poco el manejo o para aplicarlo a un caso concreto de copia.