我需要通过网络将几 TB 和数千个文件从一个 Linux 主机移动到另一个 Linux 主机。我希望获得有关如何编写脚本的建议,并牢记以下几点:
- 要移动的文件将符合日期配置文件(即“早于” x 年)
- 一个文件的失败不应该阻止其余文件的移动(continue_on_error),并且应该在日志文件中记录
- 源主机上的文件在移动成功后应自动删除
- 源主机上的目录结构包含许多不能移动的文件,因为它们不符合日期配置文件。这些文件不应该被触碰
- 脚本应该连续运行而无需用户干预,直到完成
- 文件是按顺序还是并行移动并不重要
xargs 和 Rsync 都可以,只是它似乎不提供在成功复制源文件后“删除”源文件的功能。
答案1
Rsync 确实有删除源文件的选项. 结合--校验和标志对于这种操作来说它应该足够值得信赖。
但是你可以使用git 附件用于迁移(它将在后台使用 rsync 进行实际传输)。
在主机 A 上:
mkdir annex
git init
git annex init "host A"
在主机 B 上:
git clone ssh://A/path/to/annex annex
git annex init "host B"
git annex sync
再次在主机 A 上进行如下操作:
git remote add b ssh://B/path/to/annex
将文件复制到附件文件夹后,添加到主机 A 上的 git-annex:
git annex add .
git commit . -m "Added files"
find /path/to/files* -mtime +5 -exec git annex move {} --to b\;
git-annex sync