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
.
-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.-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.-delete
: esta opción ayuda a eliminar archivos extraños de la máquina/directorio de destino.-e
: esta opción ayuda a informar arsync
sobre el shell que debe usarse.-exclude="*.filetype"
: esta opción ayuda a excluir todos los archivos de un tipo específico de una transferencia. En el comando anterior, reemplazamostipo de archivo
con el tipo de archivo real. Por ejemplo,-exclude="*.docx"
.-h
: esta opción ayuda a iniciar la ayuda pararsync
.-progreso
: esta opción ayuda a mostrar el progreso de la transferencia a medida que se ejecuta el comando.-q
: esta opción ejecuta todos los comandos en segundo plano o en silencio.-v
- Esta opción realiza la transferencia para que el usuario pueda leer todos los procesos que se están ejecutando.-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.
-
Realice una llamada a
subproceso
y especifique el comandorsync
.import subprocess subprocess.call(["rsync", "[option]", "[origin]", "[destination]"])
-
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.
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