如何在 Python 中通过 SFTP 检查 S_ISREG 以获取 Windows NTFS 文件?

Posted

技术标签:

【中文标题】如何在 Python 中通过 SFTP 检查 S_ISREG 以获取 Windows NTFS 文件?【英文标题】:How to check S_ISREG for a Windows NTFS file over SFTP in Python? 【发布时间】:2021-10-02 01:10:32 【问题描述】:

我正在连接到 SFTP 服务器 (NTFS) 并尝试获取所有常规文件(在我的情况下,它们现在是 json 文件,但它们可能是其他任何文件)。这是相关的sn-p代码:

import stat
import paramiko

# more code here

for file in sftp_client.listdir_attr(curr_path):
    if stat.S_ISREG(file.st_mode):
        # do something

我的问题是,当我检查 S_ISREG 时,每个文件都返回为 False。该文件只是一个普通的 json,因此应将其标记为常规文件。

我怀疑问题在于检查文件的 inode 的 S_ISREG 是一个非常 Unix 的概念,而服务器是基于 Windows 的。我怀疑这一点是对的吗?我不能使用 S_ISREG 或任何与 inode 相关的东西,因为 Windows NTFS 文件没有 inode 值?

我还能如何检查这些文件是否正常?

【问题讨论】:

【参考方案1】:

是的,您的 Windows SFTP 服务器可能没有设置 S_IFREG 标志。

我会测试该条目是否不是文件夹:

if not stat.S_ISDIR(file.st_mode):

(您可能还想测试stat.S_ISLNK

【讨论】:

是的,这就是我们最终做的事情,现在正在工作,但从未理解为什么 S_IFREG 不起作用。

以上是关于如何在 Python 中通过 SFTP 检查 S_ISREG 以获取 Windows NTFS 文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何在Python中通过SFTP连接后列出目录中的所有文件夹和文件

如何在java中通过SFTP传输文件? [复制]

如何在 Cyber​​Duck 中通过 SFTP 使用 sudo?

用于从该框中通过 SSH 连接到 jumphost 和 sftp 的 Python 脚本

如何在python中通过引用调用静态方法[重复]

如何在python中通过正则表达式获取dict值