Вопрос: rsync только файлы, созданные или измененные после даты и времени


Целью является rsync (или использование любых других инструментов, которые дают желаемый результат) только файлы, созданные или измененные после даты. Он должен работать с именами файлов, содержащими пробелы (и / или другие символы, которые необходимо экранировать).

Мне удалось использовать эту команду в OS X 10.6.5: find . -newermt "2010-11-23 16:52:50" -type f -exec rsync -vuptn '{}' ../rsync_test/ ';' Я не думаю -newermt работает над OS ohter, чем OS X.

Проблема с этой командой заключается в том, что она запускает rsync один раз для каждого найденного файла, и это, похоже, не подходит для этого. Я попытался изменить последнее ; с + поэтому он ждет весь список файлов, но он тормозит (я попытался "+",\+ и другим способом избежать).

Предпосылки: Я пытаюсь сделать резервную копию моих файлов в удаленном месте. Файлы, содержащие много фотографий в сыром и другом формате (фотографии работают около 30 ГБ в день), rsync'ing, хотя сеть будет использовать неиспользуемое время из-за небольшой полосы пропускания (ADSL отстой). Поэтому идея состоит в том, чтобы иметь много места на диске в удаленном месте и переносить новые / измененные файлы на маленький внешний жесткий диск один раз в неделю. Затем rsync можно легко использовать для добавления новых / измененных файлов в удаленном месте. Для этого мне нужно синхронизировать новые / измененные файлы на внешнем жестком диске в течение недели, поэтому у меня всегда есть 2 копии всех файлов либо в удаленном месте для файлов старше недели, либо на внешнем жестком диске для новых / измененных файлов так как последний транспорт.

Я собирался запустить эту команду каждые 10 минут (cron) с датой и временем с момента последнего запуска.

Можете ли вы исправить мою команду? Или у вас есть еще лучшее решение?


6
2017-11-23 17:58


Источник


Последние версии GNU find поддержка -newermt, - Dennis Williamson


Ответы:


Я немного смущен тем, что вы пытаетесь сделать. Rsync, сам по себе, будет передавать только новые / измененные файлы. Поэтому, если вы переносите данные на жесткий диск один раз в неделю, вы можете периодически запускать rsync и не будет больше полосы пропускания, чем (и, возможно, меньше) предлагаемое вами решение с использованием find,

Все это работает с find похоже, что вы просто дублируете функции, которые уже есть.

Если вы действительно хотите использовать find, вам не нужно xargs или xargsподобные функции; просто сделайте это:

find ... -print | rsync ... --files-from=-

где ... «любые другие варианты, которые вы считаете уместными». Это заставляет rsync читать список файлов из stdin.


7
2017-11-23 18:30



Идея состоит в том, чтобы очистить «транспортный» жесткий диск каждый раз, когда данные были синхронизированы с жесткими дисками удаленного хранилища. Поэтому rsync (как я понимаю) скопирует файлы уже на удаленный жесткий диск, так как он имеет доступ только к транспортному диску. - Yanik
Ах я вижу. Так что найти | Решение rsync здесь будет делать то, что вы хотите. Вы не получаете много пользы от rsync здесь (так как вы всегда копируете в пустой пункт назначения, rsync не может выполнять какую-либо свою привлекательную работу по сокращению полосы пропускания); вы также можете посмотреть в нечто вроде GNU-версии tar, который имеет хорошую поддержку для инкрементных резервных копий (что вы делаете). См., Например, gnu.org/software/tar/manual/html_section/Incremental-Dumps.html, - larsks
С помощью find . -newermt "2010-11-23 16:52:50" -print0 | rsync -vuptn -0 --files-from=- ../rsync_test/ дает мне синтаксис или ошибку использования. Точно так же, как если бы я использовал -print - Yanik
Я выяснил. Вам все равно нужно указать источник для rsync. Тогда рабочая команда: find . -newermt "2010-11-23 16:52:50" -print0 | rsync -vuptn -0 --files-from=- . ../rsync_test/ - Yanik


+ работает только с GNU find, а OSX - с поиском BSD. использование -print0 а также xargs -0 имитировать его.

-newermt должен работать для новых версий GNU find. Моя машина Fedora 13 (GNU find 4.4.2) имеет это, но не моя машина CentOS 5 (GNU find 4.2.27). Вы должны смоделировать его, используя touch для создания файла с соответствующим временем, а затем использовать -newer в теме.


0
2017-11-23 18:20



Я уже пробовал с xargs, но не могу понять, как я должен его использовать. Можете ли вы привести мне пример? - Yanik
+ был взят у человека на моей машине :), но не работал. - Yanik
find ... -print0 | xargs -0 -I{} ... rsync {} <destination> - Ignacio Vazquez-Abrams