1. Проблемы со специальными символами в именах файлов
Есть ли специальные символы в именах файлов? В зависимости от файловой системы, в которую вы записываете эти файлы, они могут не позволять вам добавлять к файлам префикс, например, с точкой ( .
).
2. Проблемы со временем модификации rsync и webdav2
Я наткнулся на это сообщение в блоге, где описана rsync
проблема с проблемой записи / отслеживания времени изменения файла в подключенных к webdav2 каталогах box.com.
Проблема проявляется следующим образом в смонтированной файловой системе:
david@sydney:~/Pictures$ ls -l /mnt/box/bwca/08/09/IMG_3084.CR2
-rw-r--r-- 1 david david 12564061 Aug 14 16:08 /mnt/box/bwca/08/09/IMG_3084.CR2
david@sydney:~/Pictures$ ls -l 2012/08/09/IMG_3084.CR2
-rw-rw-r-- 1 david david 12564061 Aug 9 13:00 2012/08/09/IMG_3084.CR2
Та же статья показала обходной путь:
$ rsync -avhP --size-only --bwlimit=64 2012/08 /mnt/box/bwca/
Это нормальный способ использования rsync
, но теперь он сравнивает файлы только по размеру, а не по контрольным суммам.
3. Проблемы с davfs2 (WebDAV)
Я наткнулся на эту тему под названием: rsync через davfs2? на форуме WebDAV (davfs) на sourceforge. Кто-то интересовался похожей ситуацией, когда они хотели использовать WebDAV для подключения поставщика онлайн-хранилищ и выполнения rsync для подключенного хранилища через WebDAV. Это то, что один из разработчиков (Вернер Бауманн) из WebDAV должен был сказать по этой теме .
выдержка из ответа Вернера
davfs2 будет загружать только полные файлы. Он не может делать инкрементные вещи, которые обычно делает rsync, и это делает rsync очень эффективным.
davfs2 использует локальный кеш на диске. Это сделает его более отзывчивым, и ваше приложение должно извлечь из этого выгоду. Но для этого нужно место на локальном диске. Вы должны предусмотреть большой размер кэша, чтобы rsync мог выполнять большую часть своей работы с локальным кэшем, а davfs2 будет загружать большинство файлов в фоновом режиме, когда rsync уже завершит работу.
Вернер продолжает предлагать следующее
Это может быть недостатком в этом случае. Когда rsync читает файл на удаленном хосте, он сначала должен быть передан davfs2 в локальный кеш (если его там еще нет). Это может сделать процесс действительно ненужным и медленным. Поскольку rsync в вашем случае работает только как сложная копировальная программа, может быть лучше использовать cp. У cp есть опции (-u) для копирования только тех файлов, которые новее, чем файлы в файловой системе davfs2 (= smartdrive), и ему не нужно читать файлы, а только читать метаданные файла, такие как mtime.
Команда типа "cp -pru directory / to / backup dav /" может выполнить эту работу. Он не должен загружать файлы (как может сделать rsync, но я не уверен) (пожалуйста, посмотрите руководства по cp и rsync).
Опции?
Поэтому, как предложил @Anthon, вы можете использовать cp -u
метод для копирования файлов. Понимая, что этот метод рассматривает только размер файла как фактор сравнения, он не совсем надежен.
Вы не должны использовать ничего, что смотрит только на время модификации при сравнении файлов cp -pru
. Вернер объясняет, почему в этой теме :
выдержка в выпуске с модом раз
Когда вы отключите файловую систему davfs2 и снова смонтируете ее через некоторое время, время файла может измениться в соответствии с информацией о времени с сервера. Такие инструменты, как cp -pu и rsync, не могут полагаться на это время, чтобы определить, какие файлы были изменены.
Поэтому, учитывая различные проблемы, связанные со временем модификации, подход, использующий чисто контрольные суммы, кажется более подходящим:
$ rsync -avvz --omit-dir-times --checksum --human-readable --progress <local dir> <remote dir>
--max-size=250M --exclude '.*'
. Я уверен, чтоcp
можно сделать это ... может быть, отправив вывод find в cp? Но я пока не знаю, как это сделать. Если мы придумаем решение, я попробуюcp -ru
. Спасибо