python - 在没有附加库的情况下,在 shell 或 Python 中使用 SFTP 递归获取文件列表

标签 python linux shell sftp

我正在使用 python 的子进程模块通过 SFTP 在两个服务器之间传输文件。我可以连接到远程服务器的唯一方法是通过 SFTP 连接。

我需要验证传输后本地和远程服务器上的两个目录是否相同。这在本地服务器上非常简单,一个基本的查找命令就可以满足我的需求。但是我不知道如何在远程服务器上获得类似的结果。

这是文件结构的示例,它在两台机器上都是相同的。

JobDirectory
    Job1
        test.txt
        tonks.txt
    Job2
        wildlife.txt
    Job3
        jackinthebox.txt
        happygilmore.txt
        sadprogrammer.txt

所以我需要一个命令来从 Job1Job2Job3 获取文件名并将它们返回给我。

有点像

echo "ls *.txt" | sftp -q user@host.example.com:/path

在这里不太好跟踪,因为它需要一个特定的路径。我可以获得目录中的文件夹列表,并对每个文件夹运行 sftp 命令,但这是很多远程连接。

我唯一可以使用的远程访问工具是子进程和 Python 的操作系统模块。诸如 Paramiko SFTP 之类的东西不可用。

最佳答案

有关简单但低效的解决方案,请参阅@pasabaporaqui 对 List recursively all files on sftp 的回答.


由于您晦涩的限制,使用一个连接的唯一解决方案是:

  • 在 Python 中打开一个 sftp 子进程
  • 向它输入 ls 命令序列,每个目录一个
  • 解析标准输出中的目录列表,为找到的每个子目录生成更多 ls 命令。

关于python - 在没有附加库的情况下,在 shell 或 Python 中使用 SFTP 递归获取文件列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54206447/

相关文章:

python - 导入错误 : No module named xgboost

python - 在python中解析json字符串列表

linux - 在 docker 容器内运行的 bash 文件中没有这样的文件或目录 sed 命令

shell - 将脚本作为用户数据传递到 AWS EC2 spot 实例

shell - Jenkins shell 脚本意外的文件结尾

python - 关于模运算的行为?

python - 有效地查找 numpy 数组中具有特定条件的行

linux - 将 rpm 从一个操作系统复制到另一个操作系统

c - 在用 C 编写的 Linux TCP/IP 服务器中处理 Ctrl-C

linux - 在 CVS 中是否可能 : "Clients not allowed to commit if there is no log written"?