Python Rsync

Abid Ullah 10 octubre 2023
Python Rsync

En un mundo de tecnologías en constante cambio, todavía y siempre podemos encontrar instancias en las que necesitamos transferir o intercambiar archivos. Rsync es una herramienta basada en Linux que puede ayudarnos a especificar los detalles de la transferencia.

Este artículo explorará rsync y cómo podemos usarlo desde un script de Python.

Python Rsync

Como se mencionó anteriormente, rsync es una herramienta poderosa que nos ayuda a especificar los detalles de la transferencia. Esto significa que podemos determinar qué archivos excluir de una transferencia y qué tipo de shell se debe usar.

Rsync generalmente se usa para transferencias con una alta complejidad de transferencia o archivos que se transfieren a granel. También es posible automatizar las copias de seguridad creadas por rsync con la ayuda de cron.

el comando rsync en Linux

Así es como se ve un formato de comando genérico rsync.

rsync [option] [origin] [destination]

Este es un comando directo cuando uno está familiarizado con Linux, pero lo desglosaremos de todos modos. Cada comando comienza con la palabra clave rsync.

Le sigue una opción, de la que tenemos un amplio abanico para elegir. Cada opción especifica la naturaleza del rsync que esperamos ejecutar.

El origen y el destino aquí son donde deseamos transferir nuestros archivos (destino) y desde dónde (origen). Esto significa que debemos tener cuidado con lo que estamos sincronizando, así como si lo estamos sincronizando desde una máquina local o remota porque rsync es a menudo la causa de que los archivos se reescriban sin mucha advertencia.

Aquí hay una lista de opciones básicas y comunes para rsync.

  1. -a: esta opción ayuda a copiar archivos de forma recursiva y ayuda a preservar la propiedad de los archivos incluso después de haberlos copiado.
  2. -dry-run: esta opción nos permite ejecutar una prueba del comando para observar los cambios que se producirían si se ejecutara el comando. Esta opción no produce ningún cambio real.
  3. -delete: esta opción ayuda a eliminar archivos extraños de la máquina/directorio de destino.
  4. -e: esta opción ayuda a informar a rsync sobre el shell que debe usarse.
  5. -exclude="*.filetype": esta opción ayuda a excluir todos los archivos de un tipo específico de una transferencia. En el comando anterior, reemplazamos tipo de archivo con el tipo de archivo real. Por ejemplo, -exclude="*.docx".
  6. -h: esta opción ayuda a iniciar la ayuda para rsync.
  7. -progreso: esta opción ayuda a mostrar el progreso de la transferencia a medida que se ejecuta el comando.
  8. -q: esta opción ejecuta todos los comandos en segundo plano o en silencio.
  9. -v - Esta opción realiza la transferencia para que el usuario pueda leer todos los procesos que se están ejecutando.
  10. -z: esta opción ayuda a comprimir los datos sincronizados.

Usar Rsync desde un script de Python

Ahora hay dos formas de hacer uso de Rsync en Python.

  1. Realice una llamada a subproceso y especifique el comando rsync.

    import subprocess
    
    subprocess.call(["rsync", "[option]", "[origin]", "[destination]"])
    
  2. Usa la biblioteca pyrsync

    Así es, y Python ahora ofrece su biblioteca para Rsync. Esta biblioteca no es un envoltorio para Rsync, pero contiene una funcionalidad completa de Rsync en sí.

    Podemos instalar esta librería vía pip.

    pip install pyrsync
    

Inicialmente, rsync requiere el uso de hash MD5, que los desarrolladores a menudo encuentran obsoleto en comparación con el uso de SHA256, que es utilizado por el pyrsync modernizado. SHA256 cumple con los requisitos estándar para la seguridad de los procesos de verificación.

Si bien pyrsync no ha tenido lanzamientos importantes desde su lanzamiento, se puede observar que tiene un enorme potencial en el mundo del desarrollo y, actualmente, no se sabe que esta biblioteca tenga errores o vulnerabilidades.

Dado que la biblioteca no está disponible, debe compilarse a partir del código fuente, que está disponible, e instalarse.

Pyrsync tiene el potencial de ahorrarnos horas y horas de tiempo de desarrollo y recursos al no tener que construir la funcionalidad que proporciona desde cero.

Su código fácil de leer y las sencillas instrucciones de instalación de Pypi hacen que sea muy fácil de incorporar a nuestros scripts.

Necesitamos ejecutar este comando si el sistema ya tiene instaladas herramientas de configuración.

$ sudo python setup.py install

Incluso si el sistema no tiene herramientas de configuración, el script setup.py detectará la ausencia y establecerá el valor predeterminado para usar las distutils integradas de Python en su lugar.

Un ejemplo de secuencia de comandos para este módulo es el siguiente:

# In the system with the file that needs patching
>>> import pyrsync2
>>> unpatched = open("unpatched.file", "rb")
>>> hashes = pyrsync2.blockchecksums(unpatched)
# In the remote machine receiving hashes
>>> import pyrsync2
>>> patchedfile = open("patched.file", "rb")
>>> delta = pyrsync2.rsyncdelta(patchedfile, hashes)
# In the origin machine with the unpatched file after receiving delta
>>> unpatched.seek(0)
>>> save_to = open("locally-patched.file", "wb")
>>> pyrsync2.patchstream(unpatched, save_to, delta)

Un punto esencial a tener en cuenta aquí sería que esta biblioteca solo ofrece soporte para Python 3 actualmente.

Esperamos que este artículo le resulte útil para comprender cómo usar rsync en Python.

Autor: Abid Ullah
Abid Ullah avatar Abid Ullah avatar

My name is Abid Ullah, and I am a software engineer. I love writing articles on programming, and my favorite topics are Python, PHP, JavaScript, and Linux. I tend to provide solutions to people in programming problems through my articles. I believe that I can bring a lot to you with my skills, experience, and qualification in technical writing.

LinkedIn