【问题标题】:Python rsync script directory names mirrorPython rsync 脚本目录名称镜像
【发布时间】:2013-01-10 04:53:46
【问题描述】:

我有一个脚本,用于使用 rsync 将文件推送回我的家用 PC。成功推送的文件名被添加到 sqlite 数据库中,因此它们不会再次被推送(因为我只想要 1 路镜像)。无论如何,我遇到的问题是,虽然脚本递归地沿着源路径向下并基于定义的扩展名推送文件,但文件沿着相同的目标根目录向下传递。

我想要的是使目标文件夹结构与源文件夹结构相同。

我认为我必须在 destDir 路径中添加一些内容,但不确定是什么:

for root, dirs, files in os.walk(sourceDir):
   for file in files:
     //If some filtering criteria
     print("Syncing new file: "+file)
     cmd=["rsync"]
     cmd.append(os.path.join(root, file))
     cmd.append(destDir+ "/")
     p=subprocess.Popen(cmd,shell=False)
 if p.wait()==0:
  rememberFile(file)

【问题讨论】:

  • 我不明白,你为什么要在单个文件上迭代地调用 rsync,而不是在 sourceDir 上?如果它们已经在目的地,它们将不会再次被推送 - 这就是 rsync 的全部意义。
  • 试试rsnapshot.org(更高级别的接口)
  • @wim:单向镜像,我只想推送文件一次。我希望能够移动/删除/目的地的文件。
  • 使用 --relative 开关排序有效,但它将源目录放在目标的根目录中:(python push.py ./a/ ./b/ 在 b 内部创建一个名为 a 的文件夹,而不是拥有根文件在 b 的根目录中的 a
  • 此问题(b 内的不需要的子目录 a)通常是由于源或目标上的尾部斜杠造成的。很难说到底发生了什么,因为您的代码无论如何都添加了斜杠。

标签: python linux rsync


【解决方案1】:

我认为您应该尽可能地依赖rsync 的功能,而不是尝试在 Python 中重新实现它。 rsync 已经过广泛测试并且功能齐全。他们已经修复了您遇到的所有错误。例如,在您的原始代码 sn-p 中,您需要重建文件的完整路径(而不仅仅是文件名)并将其添加到您的 destDir

但在继续调试之前,请考虑这个替代方案。为什么不将您推送的所有文件保存在纯文本文件中,而不是 sql db?假设它被称为exclude_list.txt。那么你的单行 rsync 命令是:

rsync -r --exclude-from 'exclude_list.txt' src dst

-r 开关会使其自动遍历文件树。有关此语法的更多详细信息,请参阅topic #6 on this page

现在您只需要您的 Python 脚本来维护exclude_list.txt。我可以想到两个选择:

  • 使用-v 选项捕获rsync 的输出,以列出已移动的文件名、解析它们并附加到exclude_list.txt。我认为这是最优雅的解决方案。您可能只需几行代码即可完成。
  • 使用您已经拥有的脚本遍历树并将所有文件添加到exclude_list.txt,但删除所有单独的rsync 调用。然后在最后调用一次rsync,如上。

【讨论】:

  • mmmm 我明白你在说什么。但是对于我想做的事情,我想我需要实现你的两个建议:我需要先遍历生成/附加到 exclude.txt 基于过滤器(.exe,.doc,等)然后同步其余部分。完成后, rsync 其余部分,如您所述,捕获详细输出并以这种方式解析。关于如何做到这一点的任何建议?将寻找特定的字符串(“成功”)并添加以下内容?
  • 编辑:看来我可以在排除列表中使用通配符,所以我不必先遍历来过滤扩展名,我可以在排除文件中这样做。
  • 是的,我可能会使用 rsync 的 -v 和 --log-file 参数来转储传输文件的列表,然后使用 python 解析该日志文件。您必须进行一些测试以确保如果 rsync 失败(例如由于未安装的目的地)它仍然可以工作。
猜你喜欢
  • 1970-01-01
  • 2015-09-24
  • 2021-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-25
  • 1970-01-01
  • 2011-11-09
相关资源
最近更新 更多