我在本地机器上有一个目录,我想用Fabric复制到远程机器上(并重命名)。我知道我可以用
put()
来复制文件,但是目录呢。我知道使用
put()
很容易
scp
, but I would prefer to do it from within my
fabfile.py
if possible.
如何使用Fabric将一个目录复制到远程机器上?
你也可以使用
put
来实现(至少在1.0.0中)。
替换代码1】可以是一个相对或绝对的本地文件或 目录路径 ,并可能包含 外壳式通配符 如同Python所理解的那样 glob 模块。还会进行蒂尔德扩展(由os.path.expanduser实现)。
See: 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
# ...
谢谢。我得到了一个异常(是一个目录)任何机会的一个例子?
miku
:
@gaviscon_man:添加了一个(经过测试的)例子,但实际上它只是普通的
fab
,没有什么技巧。如果目标目录还没有到位,你会得到错误--所以我在
put
之前加入了一个简单的
mkdir -p
。 但是其他子目录,也就是
testdirectory
下面的目录会在远程机器上自动创建)。
谢谢你,这很有帮助。
put
正在工作。它是否支持在源机器上压缩并在远程机器上解压的文件夹的复制。
Seth Gottlieb
发布于
2019-02-13
0
人赞同
我也会看一下项目工具模块: fabric.contrib.project
这有一个
upload_project
函数,它接受一个源和目标目录。 更好的是,有一个
rsync_project
函数,使用rsync。 这很好,因为它只更新有变化的文件,而且它接受额外的参数,如 "排除",这对做排除你的
.git
目录这样的事情很好。
from fabric.contrib.project import rsync_project
def _deploy_ec2(loc):
rsync_project(local_dir=loc, remote_dir='/var/www', exclude='.git')
lsh
:
fabric.contrib.project
docs的最新版本。
docs.fabfile.org/en/latest/api/contrib/project.html
benzkji
:
比
put/get
好得多。例如,对于从实时网站获取用户上传的内容,也能完美工作(
upload=False
,它在两种方式下都能工作,这一点并不明显)。
ryantuck
:
我不得不把排除的目录包起来,以使其发挥作用。替换代码0
David
:
这已经被转移到
patchwork
库中了。
fabric-patchwork.readthedocs.io/en/latest/api/transfers.html
详见其他答案。
stackoverflow.com/a/54667814/10190810