有没有办法判断文件是否已完成复制?

Mik*_*per 4 scp

场景是这样的:机器 A 有我想复制到机器 C 的文件。机器 A 不能直接访问 C,但可以访问可以访问机器 C 的机器 B。我正在使用 scp 从机器 A 复制到 B,并且然后从 B 到 C。

机器B的存储空间有限,所以文件进来了,我需要将它们复制到C,然后从B中删除。第二次复制要快得多,所以这对带宽没有问题。

我可以手动完成,但我很懒。我想是运行在B或C的脚本,将每个文件复制到C为每一个完成。scp 作业从 A 运行。

所以我需要的是一种询问(最好从 bash 脚本)文件 X.avi 是否“完成”复制的方法。这些文件中的每一个都有不同的大小,我无法真正预测完成的大小或时间。

编辑:顺便说一下,如果时间尺度很重要,文件传输时间从 A 到 B 大约需要 1 小时,从 B 到 C 大约需要 10 分钟。

bmb*_*bmb 8

执行此操作的常用方法是首先将其复制到临时文件名,最好是隐藏文件。复制完成后,执行复制的脚本会将其重命名为非隐藏文件名。

然后机器 B 上的脚本可以监视非隐藏文件。

机器 A 上的脚本如下所示:

for file in `ls *` ; do
    scp $file user@host:~/.${file}.tmp
    ssh user@host "mv ~/.${file}.tmp $file"
done
Run Code Online (Sandbox Code Playgroud)

虽然这不能满足 OP 使用单行的愿望

scp * user@host:~/
Run Code Online (Sandbox Code Playgroud)

它完成同样的事情,还允许机器 B 在完成时传输每个文件,而无需等待下一个文件。