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

80s*_*eys 1 scripting linux

我有几个 TB 和数千个文件,我需要通过网络从一台 Linux 主机移动到另一台。我想获得有关如何编写脚本的建议,请记住以下几点:

  • 要移动的文件将适合日期配置文件(即“早于”x 年)
  • 一个文件的失败不应阻止其余文件的移动 (continue_on_error) 并应在日志文件中注明
  • 移动成功后应自动删除源主机上的文件
  • 源主机上的目录结构包含许多不能移动的文件,因为它们不适合日期配置文件。不应触及这些文件
  • 脚本应该在没有用户干预的情况下连续运行直到完成
  • 文件是顺序移动还是并行移动并不重要

xargs 和 Rsync 会很好,除非它似乎不提供在成功复制后“删除”源文件的能力。

小智 7

Rsync 确实有一个删除源文件的选项。结合--checksum 标志,对于这种操作,它应该足够值得信赖。

但是,您可以使用git-annex进行迁移(它将在幕后使用 rsync 进行实际传输)。

在主机 A 上:

mkdir annex
git init
git annex init "host A"
Run Code Online (Sandbox Code Playgroud)

在主机 B 上:

git clone ssh://A/path/to/annex annex
git annex init "host B"
git annex sync
Run Code Online (Sandbox Code Playgroud)

再次在主机 A 上:

git remote add b ssh://B/path/to/annex
Run Code Online (Sandbox Code Playgroud)

将文件复制到附件文件夹后,将文件添加到主机 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
Run Code Online (Sandbox Code Playgroud)

有关用法的详细信息,请参阅git-annex 演练