【发布时间】: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)通常是由于源或目标上的尾部斜杠造成的。很难说到底发生了什么,因为您的代码无论如何都添加了斜杠。