如何使用Fabric将目录复制到远程计算机?
我在本地机器上有一个目录,我想使用Fabric将其复制到远程机器(并对其进行重命名)。 我知道我可以使用put()
复制文件,但是一个目录呢。 我知道使用scp很容易,但如果可能的话,我宁愿从我的fabfile.py
。
你也可以使用put
(至less在1.0.0):
local_path
可能是相对或绝对的本地文件或目录path ,并且可能包含shell样式的通配符 ,正如Python glob模块所理解的。 Tilde扩展(由os.path.expanduser实现)也被执行。
请参阅: http : //docs.fabfile.org/en/1.0.0/api/core/operations.html#fabric.operations.put
更新:这个例子工作正常(对我来说)在1.0.0:
from fabric.api import env from fabric.operations import run, put env.hosts = ['frodo@middleearth.com'] 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') # [frodo@middleearth.com] Executing task 'copy' # [frodo@middleearth.com] run: mkdir -p /home/frodo/tmp # [frodo@middleearth.com] put: testdirectory/HELLO -> \ # /home/frodo/tmp/testdirectory/HELLO # [frodo@middleearth.com] put: testdirectory/WORLD -> \ # /home/frodo/tmp/testdirectory/WORLD # ...
我也看看项目工具模块:fabric.contrib.project 文档
这有一个upload_project
函数,它接受一个源和目标目录。 更好的是,有一个使用rsync的rsync_project
函数。 这是很好的,因为它只更新已经改变的文件,并且接受像“排除”这样的额外参数,这对于排除.git
目录是很好的。
例如:
from fabric.contrib.project import rsync_project def _deploy_ec2(loc): rsync_project(local_dir=loc, remote_dir='/var/www', exclude='.git')