假设我们有机器 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