![SCP 不会覆盖空文件时间戳](https://linux22.com/image/1585127/SCP%20%E4%B8%8D%E4%BC%9A%E8%A6%86%E7%9B%96%E7%A9%BA%E6%96%87%E4%BB%B6%E6%97%B6%E9%97%B4%E6%88%B3.png)
我的应用程序每天都会生成一个文件,该文件将通过 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
保留原始文件的修改时间、访问时间和模式。