如何将文件scp到Unix主机,以便文件轮询服务在复制完成之前不会看到它?

如何将文件scp到Unix主机,以便文件轮询服务在复制完成之前不会看到它?,unix,scp,Unix,Scp,我正在尝试使用scp将文件传输到远程Unix服务器。在该服务器上,有一个服务轮询目标目录以检测要处理的传入文件。我希望确保轮询服务不会在副本完成之前获取新文件。有办法吗 我的文件传输过程是一个嵌入在较大Java程序中的简单scp命令。理想情况下,由于涉及变更控制流程的原因,不涉及变更Jana的解决方案是最好的 您可以将文件scp到另一个/tmp目录并移动 传输完成后通过ssh发送文件。不同的目录需要与最终目标目录位于同一分区上,否则将进行复制操作,您将面临类似的问题。目标计算机上的另一个服务可以

我正在尝试使用scp将文件传输到远程Unix服务器。在该服务器上,有一个服务轮询目标目录以检测要处理的传入文件。我希望确保轮询服务不会在副本完成之前获取新文件。有办法吗

我的文件传输过程是一个嵌入在较大Java程序中的简单scp命令。理想情况下,由于涉及变更控制流程的原因,不涉及变更Jana的解决方案是最好的

您可以将文件scp到另一个/tmp目录并移动 传输完成后通过ssh发送文件。不同的目录需要与最终目标目录位于同一分区上,否则将进行复制操作,您将面临类似的问题。目标计算机上的另一个服务可以执行此移动操作

您可以将文件复制为文件名的隐藏前缀。复制,然后移动

如果可以修改轮询服务,则可以检查活动的scp进程并忽略与scp参数匹配的文件

您可以使用lsof+d$目录检查打开的文件,并在轮询服务器中忽略它们

您可以将文件scp到另一个/tmp目录并移动 传输完成后通过ssh发送文件。不同的目录需要与最终目标目录位于同一分区上,否则将进行复制操作,您将面临类似的问题。目标计算机上的另一个服务可以执行此移动操作

您可以将文件复制为文件名的隐藏前缀。复制,然后移动

如果可以修改轮询服务,则可以检查活动的scp进程并忽略与scp参数匹配的文件

您可以使用lsof+d$目录检查打开的文件,并在轮询服务器中忽略它们


我建议使用而不是scp复制文件。rsync已经将新文件复制到临时文件名,并且还具有许多其他有用的文件同步功能

$ rsync -a source/path/ remotehost:/target/path/
当然,如果您喜欢的话,也可以逐个文件复制

如果rsync的临时文件名足以避免被轮询服务拾取,那么您可以简单地用shell脚本替换scp命令,该脚本充当rsync的包装器,从而无需更改Java程序

您需要知道Java程序调用scp命令所使用的精确格式,以确保提供给rsync的选项符合您的预期

您还需要弄清楚Java程序如何调用scp。如果它使用完整路径名,即/usr/bin/scp,那么此解决方案可能会使依赖于scp的系统面临风险,例如,希望scp像通常一样工作,而不是作为包装器。更改包安装的二进制文件(如/usr/bin/scp)也可能会中断包注册,从而使以后安装安全更新变得困难,因为二进制文件已更改为shell脚本。当然,您所做的任何更改都可能涉及安全问题

总而言之,我怀疑您最好更改Java程序,使其完全满足您的需要,即使这是启动一个shell脚本来处理自动化方面的问题,您希望在未来能够在不修改Java的情况下进行更改


祝你好运

我建议使用而不是scp复制文件。rsync已经将新文件复制到临时文件名,并且还具有许多其他有用的文件同步功能

$ rsync -a source/path/ remotehost:/target/path/
当然,如果您喜欢的话,也可以逐个文件复制

如果rsync的临时文件名足以避免被轮询服务拾取,那么您可以简单地用shell脚本替换scp命令,该脚本充当rsync的包装器,从而无需更改Java程序

您需要知道Java程序调用scp命令所使用的精确格式,以确保提供给rsync的选项符合您的预期

您还需要弄清楚Java程序如何调用scp。如果它使用完整路径名,即/usr/bin/scp,那么此解决方案可能会使依赖于scp的系统面临风险,例如,希望scp像通常一样工作,而不是作为包装器。更改包安装的二进制文件(如/usr/bin/scp)也可能会中断包注册,从而使以后安装安全更新变得困难,因为二进制文件已更改为shell脚本。当然,您所做的任何更改都可能涉及安全问题

总而言之,我怀疑您最好更改Java程序,使其完全满足您的需要,即使这是启动一个shell脚本来处理自动化方面的问题,您希望在未来能够在不修改的情况下更改这些方面 g你的Java


祝你好运

在文件名前面加上前缀。可以对文件轮询服务隐藏,也可以不隐藏。复制到其他目录并在传输完成后移动是一个很好的解决方案,但要求备用位置与最终目标位于同一分区上。这应该在答案中注明。在文件名前加前缀。可以对文件轮询服务隐藏,也可以不隐藏。复制到其他目录并在传输完成后移动是一个很好的解决方案,但要求备用位置与最终目标位于同一分区上。这一点应该在答复中指出。