如果Perl试图在正在上传的文件上调用move()会发生什么?

有人正在FTP文件的大小10Mb文件夹在Linux服务器上。 当文件处于转换状态时,cron会唤醒并释放一个用于查看ftp文件夹的Perl脚本,并将其中find的任何内容移动到某个备用文件夹中。 我使用File :: Copy中的move()函数。 Perl过程实际上将文件重命名为其任务的一部分。 这么做还是FTP不关心文件系统如何描述文件?

move()成功移动一个部分文件,离开FTP做什么? 或将移动失败,并返回0?

不,移动应该只是让新的位置完成下载过程。 你只是将inode从一个位置移动到另一个位置。 下载程序打开的文件描述符应该仍然指向它。

我只想重复其他几个人提到的。 这只有在移动操作位于同一个文件系统上的情况下才有效。 如果它作为另一个文件系统比inode不能被转移,因为它总是属于同一个文件系统。 那么最可能的情况是当时的部分数据被复制到新的位置,而程序仍然在不再附加到文件的旧的inode中下载,因此不能使用。

由于没有标准的move ,很难知道你的情况是怎么回事。 如果你的意思是rename ,那么你可能不会有任何问题,因为你的情况会出错的主要方式是如果你将文件从一个文件系统移动到另一个文件系统(因此做一个复制和删除,而不是真正的举动),并在大多数系统rename将在这种情况下失败。 (所以如果你的设置完全可以,那就没关系了。)

如果你不使用rename而是一些move功能,例如,将处理文件系统的移动,那么如果涉及多个文件系统,那么你很可能会使用部分文件。 (例如,如果你现在都在一个文件系统上,那么这可能会变成一个非常讨厌的问题,但是随后在上传的这些文件占用了大量的空间,并且添加了一个专用于存储它们的驱动器 – 现在你正在做一个跨文件系统的移动。)

我不确定,但很可能没有错将会发生。 移动不会更改文件inode编号,以便FTP服务器根本不会注意到该移动,并将继续写入新位置中的文件。 简而言之, move()将成功,上传将继续在新的位置。