У меня есть команда rsync, которую я выполняю ежечасно через cron, и чтобы предотвратить одновременное выполнение нескольких rsync (если rsync предыдущего часа все еще будет работать, когда наступит следующий час), я завернул ее в стаю. Моя проблема заключается в том, что, несмотря на указание фильтра исключения, который должен предотвращать копирование временных файлов, я получаю вывод сообщений «файл исчез», которые, кажется, указывают на то, что они были бы скопированы (если бы они все еще присутствовали).
Вот мой скрипт (запускаемый 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?
Если вы хотите исключить эти файлы, ваш шаблон исключения должен быть */tmp*.tmp
.