SCP 不会覆盖空文件时间戳

SCP 不会覆盖空文件时间戳

我的应用程序每天都会生成一个文件,该文件将通过 SCP 发送到远程主机。生成的文件可能是空的,也可能不是空的,并且该文件通常存在于远程主机中(前一天的那个)。我注意到,当使用 SCP 将一个空文件(在远程主机中)替换为另一个空文件(正在生成)时,成功 SCP 后远程文件的时间戳不会改变。除非两个文件都是空的(正在发送的文件和已经存在的文件),否则不会发生这种情况。SCP 不会以任何错误结束,事实上我可以看到上传进度(即使它显示 0 字节)。我是否遗漏了 scp 如何处理空文件传输?有什么方法可以让 SCP 在成功发送后更改远程文件的时间戳,即使文件是空的?

答案1

我遇到过类似的问题,现在我认为问题与 无关scp。正如我在 中报告的那样https://bugs.centos.org/view.php?id=16079在我的 CentOS 6.9 中,使用空字符串覆盖 NFS 磁盘中的文件不会更新文件的修改时间戳 (mtime)。我认为您可以通过以下方式重现相同的问题:

printf 'hello\n' > hello.txt
stat hello.txt
sleep 5
printf '' > hello.txt
stat hello.txt

因此,我认为你必须获得复制文件名的列表(这个问题如何使用 scp -r 获取下载的文件列表似乎相关),并对touch它们使用命令。

答案2

尝试scp运行-p选项

-p
保留原始文件的修改时间、访问时间和模式。

相关内容