Есть 3 сервака, которые сливают записи на 1 хранилище. Никакой пост-обработкой данных серваки не занимаются, поэтому данные эти там не впились, их проще сразу снести.
/usr/bin/rsync -raz --progress --size-only --remove-sent-files /projects/recordings/ site.com:/var/www/storage/recordings/
Все было бы прекрасно, но rsync копирует (и удаляет) и файлы, которые не были закрыты, т.е. те, в которые еще происходит запись. А софт потом ругается, мол: агдефайл?
Я решил lsof'ом посмотреть что там не закрыто, кинуть файлы в exclude list для копирования rsync и радоваться жизни. Получилось что-то такое:
# выхлоп вида /projects/recordings/<uid>/<path>/2012-07-16 13:24:32.646970-<id>.WAV
lsof | grep /projects/recordings/.\\+\\.\\S\\+ -o | sort | uniq > /tmp/rsync.exclude
/usr/bin/rsync -raz --progress --size-only --remove-sent-files --exclude-files=/tmp/rsync.excldude /projects/recordings/ site.com:/var/www/storage/recordings/
# поменяем владельца на помойке
ssh storage@site.com chown -hR storage:storage /var/www/storage/recordings
Но rsync видимо хочет увидеть там шаблоны (--exclude-from=FILE read exclude >>patterns<< from FILE), а не абсолютные пути.. да еще и с пробелами. И тут меня все опечалило.
Поэтому есть 2 вопроса: 1) что можно взять вместо rsync (что умеет не трогать открытое) 2) как rsync обучить не трогать чужое