在外壳或Python中使用SFTP以递归方式获取文件列表,而无需其他库

时间:2019-01-15 20:36:20

标签: python linux shell sftp

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

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

这是文件结构的示例,两台计算机上的文件结构相同。

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的OS模块。无法使用Paramiko SFTP之类的东西。

1 个答案:

答案 0 :(得分:0)

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


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

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