我正在使用 python 的子进程模块通过 SFTP 在两个服务器之间传输文件。我可以连接到远程服务器的唯一方法是通过 SFTP 连接。
我需要验证传输后本地和远程服务器上的两个目录是否相同。这在本地服务器上非常简单,一个基本的查找命令就可以满足我的需求。但是我不知道如何在远程服务器上获得类似的结果。
这是文件结构的示例,它在两台机器上都是相同的。
JobDirectory
Job1
test.txt
tonks.txt
Job2
wildlife.txt
Job3
jackinthebox.txt
happygilmore.txt
sadprogrammer.txt
所以我需要一个命令来从 Job1
、Job2
和 Job3
获取文件名并将它们返回给我。
有点像
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/