首页 > 解决方案 > 在 Fabric 中,如何从远程路径创建全局列表

问题描述

使用 Python 的Fabric,我想将文件传输到远程服务器或从远程服务器传输文件。

我需要从像*or这样的全局表达式生成要传输的文件列表*.txt(然后应用一些额外的排除项)。

对于传输远程的情况,很容易获取源文件列表,因为源是本地的:

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

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

标签: pythonglobremote-serverfabric

解决方案


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

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']

推荐阅读