Определенные файлы Rsync только из корневого каталога и подкаталогов

ACL также влияют на этап аутентификации.

При использовании простой привязки (с DN и паролем )вы должны предоставить auth право на атрибуты запись и userPassword на входе в быть аутентифицированным.

Но AFAICS ваш последний ACL эффективно блокирует доступ для аутентификации к записи псевдо -атрибута . Я бы попробовал, так как последний ACL (не тестировался):

olcAccess: {2}to * by self read by * auth
2
24.09.2021, 20:18
3 ответа

Если у вас есть доступные findи xargs, вы можете сделать это:

find. -type f -iname "*.epub" -print0 | xargs -0 -I {} rsync -aPEmivv "{}" "/destination/directory"

И если вы не хотите использоватьxargs:

find. -type f -iname "*.epub" -exec rsync -aPEmivv "{}" "/destination/directory" \;

(оба варианта должны запускаться в вашем каталоге /books/)

Является ли параметр -aв rsyncтем, что вам нужно, так как это подразумевает-rlptgoD(рекурсию, символические ссылки, прес. разрешения, сохранить время, сохранить владельца, сохранить группу,сохранять файлы устройств ), это ваше решение.

Обратите внимание, что при передаче имен файлов в другую программу рекомендуется использовать null -строки с разделителями(-print0для переключателя в findи -0в xargsи rsyncдля null -ввод с разделителями ), чтобы специальные символы в именах файлов не вызывали проблем.

2
25.09.2021, 00:56

У вас есть несколько уровней для повторения? Если не?

rsync -aP  books/*/*.epub books/*.epub /home/user/movedbooks/.
1
25.09.2021, 00:26

Утилита rsyncможет считывать имена путей из файла или входного потока. Вы можете использовать find, чтобы найти файлы, которые вы хотите скопировать, а затем скопировать их с помощью rsync.

Мы предполагаем, что вы хотите рекурсивно искать в каталоге /media/share/Booksлюбой обычный файл, имя которого соответствует шаблону подстановки оболочки *.epub. Любой найденный файл, соответствующий этим критериям, должен быть скопирован в один каталог /home/user/docker/calibre/booksбез создания соответствующей структуры каталогов, найденной в исходной иерархии :

.
find /media/share/Books -type f -name '*.epub' -print0 |
rsync   --from0 --files-from=-  \
        --archive --no-relative \
        / /home/user/docker/calibre/books

Способ, которым мы используем findвыше, предполагает, что он поддерживает нестандартный -, но обычно реализуемый предикат -print0. Если это не так, вы можете заменить -print0на -exec printf '%s\0' {} +.

Обратите внимание на параметры, используемые с rsyncвыше. Опция --from0заставляет rsyncинтерпретировать поток данных, считанный с помощью --files-from, как список путей с разделителями, -нуль. -, используемый с --files-from, означает «чтение из стандартного потока ввода», то есть из команды find. Мы используем опцию --archive(-a)для копирования/синхронизации как можно большего количества метаданных с каждым файлом и--no-relative(--no-R)для удаления компонента пути к каталогу в именах путей чтения.

Исходным каталогом, используемым с rsync, является /, так как имена путей, которые мы читаем из find, относятся к корневому каталогу.

Этот конвейер выполняет rsyncодин раз и безопасно передает пути между findи rsync. Вам нужно только знать, что rsyncразрешает конфликты имен, просто игнорируя другие файлы с теми же именами, что и уже перечисленные файлы.


Вы также можете вызвать rsyncнапрямую из findс помощью -exec, но для большей эффективности мы можем использовать findдля поиска каталогов, а затем вызвать rsyncдля синхронизации всех *.epubфайлов в каждом.

find /media/share/Books -type d -exec sh -c '
        for dirpath do
                rsync   --archive       \
                        --include="*.epub" --exclude="*"        \
                        "$dirpath/" /home/user/docker/calibre/books
        done' sh {} +

Здесь мы делаем что-то похожее на то, что вы пытались сделать, но явно запрещаем рекурсию, исключая каталоги из обработки.Вместо рекурсии с rsyncмы передаем это на аутсорсинг find.

0
25.09.2021, 17:02

Теги

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