WinSCP .NET 程序集 SynchronizeDirectories:上传文件 ... 成功,但设置权限时出错 and/or 时间戳
WinSCP .NET assembly SynchronizeDirectories: Upload of file ... was successful, but error occurred while setting the permissions and/or timestamp
我在 PowerShell 中使用 WinSCP .NET 程序集与 SFTP 服务器进行文件同步。我正在使用以下代码进行同步:
http://winscp.net/eng/docs/library_session_synchronizedirectories#powershell
问题是,当此脚本通过上传到 SFTP 同步文件时,它会生成错误,尽管它实际上上传了文件。脚本立即终止并出现以下错误:
Upload of C:\FileSync\files\test2.txt succeeded
Permissions of /Reports/test2.txt kept with their defaults
Setting timestamp of /Reports/test2.txt failed:
WinSCP.SessionRemoteException: Upload of file 'test2.txt' was successful, but error occurred while setting the permissions and/or timestamp.
If the problem persists, turn off setting permissions or preserving timestamp. Alternatively you can turn on 'Ignore permission errors' option.
---> WinSCP.SessionRemoteException: The server does not support the operation.
Error code: 8
Error message from server: SSHServerAPI.SFTP.fxp_attrs
--- End of inner exception stack trace ---
我没有找到任何方法来按照错误中的建议“忽略权限错误”。
通过从 SFTP 下载文件进行同步时,脚本不会报错。
有什么帮助吗?
错误记录在此处:
https://winscp.net/eng/docs/message_preserve_time_perm
我假设您没有启用设置权限(默认情况下是关闭的)。如果这样做,请通过设置 TransferOptions.FilePermissions
(见下文)将其关闭。
您的服务器可能不支持更新远程文件的时间戳。这使得允许针对此类服务器进行文件的本地到远程同步变得复杂,因为时间戳是 primary criteria 来比较文件。
一般来说,关闭同步更新时间戳是没有意义的,因为更新基本上是同步的一个组成部分。
"Ignore permission errors" 的提示用于基本文件传输。如前所述,同步没有意义。
所以你所能做的就是:
关闭更新时间戳(设置TransferOptions.PreserveTimestamp
);
并使 WinSCP 在比较文件时不考虑时间戳(将 criteria
parameter of Session.SynchronizeDirectories
设置为 [WinSCP.SynchronizationCriteria]::Size
或 None
)。
这种同步有何意义值得怀疑。
$transferOptions = New-Object WinSCP.TransferOptions
...
$transferOptions.FilePermissions = $Null # This is default
$transferOptions.PreserveTimestamp = $False
$synchronizationResult = $session.SynchronizeDirectories(
[WinSCP.SynchronizationMode]::Remote, "d:\www", "/home/martin/public_html",
$False, $False, [WinSCP.SynchronizationCriteria]::Size)
我在 PowerShell 中使用 WinSCP .NET 程序集与 SFTP 服务器进行文件同步。我正在使用以下代码进行同步:
http://winscp.net/eng/docs/library_session_synchronizedirectories#powershell
问题是,当此脚本通过上传到 SFTP 同步文件时,它会生成错误,尽管它实际上上传了文件。脚本立即终止并出现以下错误:
Upload of C:\FileSync\files\test2.txt succeeded
Permissions of /Reports/test2.txt kept with their defaults
Setting timestamp of /Reports/test2.txt failed:
WinSCP.SessionRemoteException: Upload of file 'test2.txt' was successful, but error occurred while setting the permissions and/or timestamp.
If the problem persists, turn off setting permissions or preserving timestamp. Alternatively you can turn on 'Ignore permission errors' option.
---> WinSCP.SessionRemoteException: The server does not support the operation.
Error code: 8
Error message from server: SSHServerAPI.SFTP.fxp_attrs
--- End of inner exception stack trace ---
我没有找到任何方法来按照错误中的建议“忽略权限错误”。
通过从 SFTP 下载文件进行同步时,脚本不会报错。
有什么帮助吗?
错误记录在此处:
https://winscp.net/eng/docs/message_preserve_time_perm
我假设您没有启用设置权限(默认情况下是关闭的)。如果这样做,请通过设置
TransferOptions.FilePermissions
(见下文)将其关闭。您的服务器可能不支持更新远程文件的时间戳。这使得允许针对此类服务器进行文件的本地到远程同步变得复杂,因为时间戳是 primary criteria 来比较文件。
一般来说,关闭同步更新时间戳是没有意义的,因为更新基本上是同步的一个组成部分。
"Ignore permission errors" 的提示用于基本文件传输。如前所述,同步没有意义。
所以你所能做的就是:
关闭更新时间戳(设置
TransferOptions.PreserveTimestamp
);并使 WinSCP 在比较文件时不考虑时间戳(将
criteria
parameter ofSession.SynchronizeDirectories
设置为[WinSCP.SynchronizationCriteria]::Size
或None
)。
这种同步有何意义值得怀疑。
$transferOptions = New-Object WinSCP.TransferOptions
...
$transferOptions.FilePermissions = $Null # This is default
$transferOptions.PreserveTimestamp = $False
$synchronizationResult = $session.SynchronizeDirectories(
[WinSCP.SynchronizationMode]::Remote, "d:\www", "/home/martin/public_html",
$False, $False, [WinSCP.SynchronizationCriteria]::Size)