如何用WinSCP文件掩码仅下载1天内的文件而非整个目录?
仅下载WinSCP中1天内的文件(替代目录批量拉取)
完全可以通过WinSCP的文件掩码+时间条件实现,不用拉取整个目录,直接精准过滤出1天内修改的文件。具体修改方法如下:
核心原理
WinSCP支持带时间维度的文件掩码,用>=1D表示最后修改时间在1天以内的文件,结合递归参数就能遍历所有子目录并只下载符合条件的文件。
脚本修改步骤
- 移除原脚本中拉取整个目录的逻辑,改用
TransferOptions设置文件掩码 - 在
GetFiles命令中传入带时间过滤的TransferOptions,同时开启递归遍历子目录
修改后的完整PowerShell脚本示例
# 配置WinSCP会话参数 $sessionOptions = New-Object WinSCP.SessionOptions -Property @{ Protocol = [WinSCP.Protocol]::Sftp # 根据实际协议调整(SFTP/FTP等) HostName = "你的服务器地址" UserName = "你的用户名" Password = "你的密码" SshHostKeyFingerprint = "你的SSH密钥指纹" # SFTP需要,FTP可忽略 } $session = New-Object WinSCP.Session try { $session.Open($sessionOptions) # 设置传输选项:仅匹配1天内修改的文件 $transferOptions = New-Object WinSCP.TransferOptions $transferOptions.FileMask = ">=1D" # 执行下载:递归遍历所有子目录,只下载符合条件的文件 # 第一个参数是远程根路径,第二个是本地目标路径,$False表示不删除远程文件 $transferResult = $session.GetFiles("/远程根目录/*", "C:\本地目标目录\*", $False, $transferOptions) # 检查下载过程中的错误 $transferResult.Check() # 输出成功下载的文件列表 foreach ($transfer in $transferResult.Transfers) { Write-Host "已下载: $($transfer.FileName)" } } finally { # 关闭会话 $session.Dispose() }
额外说明
- 时间掩码可灵活调整:
>=1H(1小时内)、>2024-05-20(指定日期之后)等,根据需求修改 - WinSCP 5.1及以上版本支持该时间掩码语法,确保你的版本符合要求
- 该逻辑只会下载文件,不会拉取空目录或不符合时间条件的目录本身
内容的提问来源于stack exchange,提问作者JM1
相关产品推荐
相关产品推荐

