关于编写脚本将大量文件从一个Linux主机移动到另一个Linux主机的建议

关于编写脚本将大量文件从一个Linux主机移动到另一个Linux主机的建议

我需要通过网络将几 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

查看git-annex 演练,了解使用详情

相关内容