如何让 rsync 排除一个 flock 内的文件模式?

如何让 rsync 排除一个 flock 内的文件模式?

我有一个 rsync 命令,我通过 cron 每小时运行一次,为了防止它同时进行多个 rsync(如果前一个小时的 rsync 在下一个小时到来时仍在运行),我将其包装在一个 flock 中。我的问题是,尽管指定了一个应该阻止复制临时文件的排除过滤器,但我收到“文件已消失”消息输出,似乎表明它们已被复制(如果它们仍然存在)。

这是我的脚本(由 cron 运行):

#! /bin/sh
cd /blah/data
flock -n .rsync_lock -c "rsync $1 -xa --exclude '/tmp*' --ignore-existing jcr/datastore remote-host:data/jcr"

下面是我得到的输出:

file has vanished: "/blah/data/jcr/datastore/tmp1774058021534447273.tmp"
file has vanished: "/blah/data/jcr/datastore/tmp2911761408812578785.tmp"
file has vanished: "/blah/data/jcr/datastore/tmp3744586075822519088.tmp"
file has vanished: "/blah/data/jcr/datastore/tmp6622502546708007750.tmp"
file has vanished: "/blah/data/jcr/datastore/tmp8270853704354349176.tmp"
rsync warning: some files vanished before they could be transferred (code 24) at main.c(977) [sender=2.6.9]

为什么我的排除过滤器没有阻止这些文件被考虑传输?这是一个奇怪的 bash 引用问题吗?

答案1

如果您想排除这些文件,您的排除模式需要是*/tmp*.tmp

相关内容