rsync - скопируйте список файлов в удаленный каталог

У меня есть команда rsync, которая сканирует для нахождения недавно созданных файлов и затем синхронизирует его с удаленным ПК. Оба ПК имели ту же файловую структуру до недавнего времени.

find /mnt/movies -type f -ctime -1 -print0 | rsync -0Prvuz --log-file=/home/daisy/rsync/movies.log -e "ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" --files-from=- --from0 / daisy@melbourne.11111.net:/

В этом случае недавно созданные фильмы от /mnt/movies/ отправляются месту назначения в том же месте (/mnt/movies/).

Теперь я должен отправить их в /mnt/drive/movies/ который является изменением, но ни за что в жизни я не могу разработать, как сделать это.

Я понимаю / после --files-from=- --from0 причины rsync для размещения вывода находки в / каталог места назначения, изменяясь / кому: /mnt/drive/ причины rsync для создания каталога /mnt/movies/... в /mnt/drive папка. То, что я хотел бы видеть, /mnt/drive/movies/movie1/1.mkv

Надежда кто-то может помочь мне с этим:/

3
задан 10 October 2016 в 12:42

1 ответ

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

find ... | sed -z 's/^\/mnt\/movies\///' | rsync ...

(использование -z сказать sed использовать ПУСТЫЕ разделители от -print0 и для --from0)

Но, steeldriver услужливо указанный в комментарии, что мы можем достигнуть того же самого без sed использование printf '%P\0' вместо просто print0 в find команда, и это делает точно то же как мою идею, но намного более изящно (отбрасывание части пути, указанного в команде).

Делая это, каждый путь к файлу будет справедлив movie1/1.mkv. Так, в конце, вместо --from0 / daisy@melbourne.11111.net:/ сказать rsync где искать тот путь, и где найти место назначения в удаленной системе:

--from0 /mnt/movies daisy@melbourne.11111.net:/mnt/drive/movies

Это хорошо работает для меня с локальным копированием.

предложенная полная команда:

find /mnt/movies -type f -ctime -1 -printf '%P\0' | rsync -Prvuz --log-file=/home/daisy/rsync/movies.log -e "ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" --files-from=- --from0 /mnt/movies daisy@melbourne.11111.net:/mnt/drive/movies
1
ответ дан 1 December 2019 в 17:31

Другие вопросы по тегам:

Похожие вопросы: