pscp 可以传输到临时文件并在完成后重命名吗?

Can pscp transfer to a temporary file and rename once done?

我有一个非常大的文件需要传输到远程服务器。

在该远程服务器上有一个作业每 5 分钟激活一次,一旦看到以正确前缀开头的文件名,就会对其进行处理。

如果作业在传输过程中“醒来”会怎样?在那种情况下,它将处理损坏的文件。

pscp 会创建一个 .temp 文件并相应地重命名它吗?还是我必须手动处理?

pscp 不通过临时文件传输文件。

您将不得不使用另一个 SFTP 客户端 – 如果您使用 pscp 作为 SFTP 客户端。 pscp 默认为 SFTP,但如果 SFTP 不可用,它会退回到 SCP。如果你需要使用 SCP(很少见),你不能这样做,因为 SCP 协议不支持文件重命名。


至少支持文件重命名的 SFTP 客户端 – 明确上传到临时文件名,然后重命名。为此,您可以使用 psftp from PuTTY package, with its put and mv commands:

open user@hostname
put C:\source\path\file.zip /destination/path/file.tmp
mv /destination/path/file.tmp /destination/path/file.zip
exit

或者使用可以通过临时文件自动上传文件的SFTP 客户端。例如 WinSCP can do that. By default it does for files over 100 KB only. If your files are smaller, you can configure it to do it for all files using the -resumesupport switch.

通过临时文件强制上传文件的示例批处理文件:

"C:\Program Files (x86)\WinSCP\WinSCP.com" ^
  /log="C:\writable\path\to\log\WinSCP.log" /ini=nul ^
  /command ^
    "open sftp://username:password@example.com/ -hostkey=""ssh-ed25519 255 ...=""" ^
    "put -resumesupport=on C:\source\path\file.zip /destination/path/" ^
    "exit"

代码 generated by WinSCP GUI with the "Transfer to temporary filename" options 设置为 “所有文件”

另请参阅 WinSCP 文章 Locking files while uploading / Upload to temporary file name

(我是WinSCP的作者)


相关问题:SFTP file lock mechanism.