在Fabric中,如何从远程路径创建全局列表

时间:2018-12-19 04:28:34

标签: python glob remote-server fabric

我想使用Python的Fabric与远程服务器之间传输文件。

我需要从**.txt之类的全局表达式中生成要传输的文件列表(然后再应用一些附加排除项)。

对于将传输到的情况,很容易遍历源文件列表,因为源是本地的:

[ f for f in Path(local_dir).glob(<my glob expression>)]

但是如何在远程服务器上执行此操作?我通过with fabric.Connection(...) as c:与远程建立了连接,但是在连接对象中找不到glob方法。

1 个答案:

答案 0 :(得分:1)

一种选择是利用c.sftp()返回的listdir对象的SFTPClient方法来获取所有远程文件的列表,然后将fnmatch.filter应用于您的glob表达式:

fnmatch.filter(c.sftp().listdir(), '*.py')

结果:使用以下远程目录,

$ ls
1.log  2.txt  3.py  4.csv  5.py

首先列出整个目录,然后添加glob:

>>> c.sftp().listdir()
['5.py', '3.py', '4.csv', '2.txt', '1.log']
>>> fnmatch.filter(c.sftp().listdir(), '*.py')
['5.py', '3.py']