FreeBSD 12.x :выполнить rsync для определенной папки с моей целевой папкой

Случайно папка "Storage" монтируется через SMB/cifs? Если вы не знаете, вы можете проверить это в файле «/etc/fstab» или ввести команду «mount | grep cifs». Если это так, вы можете попробовать опцию «vers=1.0» при монтировании FS (менее защищенной )или, если у вас есть доступ к серверу, изменить общий ресурс и монтировать его через NFS.

1
02.02.2021, 09:56
2 ответа

Вы можете использовать относительные пути, тем самым избегая всех осложнений --includeи --exclude. Здесь флаг--relative(-R)указывает rsyncсохранить исходные пути в месте назначения. /./в источнике отмечает начало сохраняемого пути (без него весь путь будет сохранен)

rsync --dry-run -aivR --stats /mnt/source/source-folder/./sfolder2/ /mnt/destination/destination-folder

Будет скопировано sfolder2и его содержимое в /mnt/destination/destination-folder/sfolder2.

Для копирования нескольких папок(sfolder2иsfolder4)можно использовать несколько исходных путей. Например, если ваша оболочка обрабатывает группы в фигурных скобках {x,y},

rsync --dry-run -aivR --stats /mnt/source/source-folder/./sfolder{2,4}/ /mnt/destination/destination-folder

или это иначе

rsync --dry-run -aivR --stats /mnt/source/source-folder/./sfolder2/ /mnt/source/source-folder/./other4/ /mnt/destination/destination-folder

(Кстати, вместо того, чтобы использовать только--recursive(-r)для копирования дерева файлов, используйте либо --archive(-a), либо добавьте --times(-t), чтобы помочь rsyncоптимизировать будущие копии тех же файлов. В моем примере я использовал -a; вы можете использовать -rt, если хотите избежать копирования прав собственности и разрешений.)

1
18.03.2021, 22:33

Вы исключили «все везде» с помощью *и включили sfolder2, который передает только файл или каталог sfolder2в корневом каталоге передачи.

Вместо этого вы можете использовать /*, чтобы исключить только файлы, относящиеся к исходному каталогу. Это означает, что если, например. /sfolder3исключается, то все файлы внутри /sfolder3также исключаются, поскольку исключается родительский каталог.

Использование /sfolder2/делает явным, что каталог относится к исходному каталогу(/в начале )и является каталогом(/в конце ). Я также заменил -rна-a(режим архива ), который включает-r:

rsync -naiv --stats --include='/sfolder2/' --exclude='/*' \
 /mnt/source/source-folder/ /mnt/destination/destination-folder/

Включить sfolder2иsfolder4:

rsync -naiv --stats --include='/sfolder2/' --include='/sfolder4/' --exclude='/*' \
 /mnt/source/source-folder/ /mnt/destination/destination-folder/
2
18.03.2021, 22:33

Теги

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