场景是这样的:机器 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 分钟。
执行此操作的常用方法是首先将其复制到临时文件名,最好是隐藏文件。复制完成后,执行复制的脚本会将其重命名为非隐藏文件名。
然后机器 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 在完成时传输每个文件,而无需等待下一个文件。