varias una ruta recorrer otro importar gestion escribir directorios directorio desde crear con carpetas carpeta archivos actual abrir python fabric

python - ruta - ¿Cómo copio un directorio a una máquina remota usando Fabric?



python directorio actual (2)

Tengo un directorio en mi máquina local que me gustaría copiar a una máquina remota (y cambiarle el nombre) usando Fabric. Sé que puedo copiar el archivo usando put() , pero ¿qué pasa con un directorio? Sé que es bastante fácil usar scp , pero preferiría hacerlo desde mi fabfile.py si es posible.


Puede usar put para eso también (al menos en 1.0.0):

local_path puede ser una ruta de directorio o archivo local relativa o absoluta, y puede contener comodines de estilo de shell , tal como lo entiende el módulo de Python glob . La expansión de Tilde (según lo implementado por os.path.expanduser) también se realiza.

Ver: http://docs.fabfile.org/en/1.0.0/api/core/operations.html#fabric.operations.put

Actualización: Este ejemplo funciona bien (para mí) en 1.0.0 .:

from fabric.api import env from fabric.operations import run, put env.hosts = [''[email protected]''] def copy(): # make sure the directory is there! run(''mkdir -p /home/frodo/tmp'') # our local ''testdirectory'' - it may contain files or subdirectories ... put(''testdirectory'', ''/home/frodo/tmp'') # [[email protected]] Executing task ''copy'' # [[email protected]] run: mkdir -p /home/frodo/tmp # [[email protected]] put: testdirectory/HELLO -> / # /home/frodo/tmp/testdirectory/HELLO # [[email protected]] put: testdirectory/WORLD -> / # /home/frodo/tmp/testdirectory/WORLD # ...


También me gustaría ver el módulo Herramientas del proyecto: fabric.contrib.project Documentation

Tiene una función upload_project que toma un directorio de origen y destino. Aún mejor, hay una función rsync_project que usa rsync. Esto es bueno porque solo actualiza los archivos que han cambiado y acepta argumentos adicionales como "excluir", lo cual es bueno para hacer cosas como excluir su directorio .git .

Por ejemplo:

from fabric.contrib.project import rsync_project def _deploy_ec2(loc): rsync_project(local_dir=loc, remote_dir=''/var/www'', exclude=''.git'')