我如何知道给定文件是否已从另一个位置上传完成?

我如何知道给定文件是否已从另一个位置上传完成?

假设我们有机器 1机器 2
机器 2基于 Linux 的,正在接收文件(假设猫.jpg通过 SCP 发送机器 1(实际上哪个操作系统并不重要..)。

我怎么知道机器 2,文件已上传完毕机器 1
请注意,我所说的“知道”是指通过运行命令(通过每分钟运行一次的 cron),而不是通过事件驱动的方式(“让 scp 在完成上传后发出命令”)。

我的另一个限制是,我无法改变任何东西机器 1或者以其 SCP 文件的方式。

如果这真的很重要:

  • 正在传输的文件是视频文件,MP4 扩展名。
  • 机器 2是 ubuntu 10.10

答案1

你应该能够使用lsof命令检查文件是否在另一个程序中打开。

lsof | grep filename

如果得到结果,则文件已在另一个进程中打开,可能仍在上传。如果结果为空白,则文件已完成上传,或者可能由于某种原因传输失败。

答案2

可能有更聪明的方法可以做到这一点,但在这种情况下,我只是用来ls显示文件大小,然后等待它在合理的时间内停止变化(10-20 秒) - 例如:

watch ls -l *.mp4

答案3

fuser -mv / 2>&1 | grep F

这将列出在给定挂载点打开和写入的所有用户、pid 和文件。

答案4

这对我有用:

while [ true ]; do
    SAMPLE1=`ls -l --full-time $FILE`
    sleep 5
    SAMPLE2=`ls -l --full-time $FILE`
    if [ "$SAMPLE1" == "$SAMPLE2" ]; then
      echo done!
      break
    fi
done

相关内容