ACL также влияют на этап аутентификации.
При использовании простой привязки (с DN и паролем )вы должны предоставить auth право на атрибуты запись и userPassword на входе в быть аутентифицированным.
Но AFAICS ваш последний ACL эффективно блокирует доступ для аутентификации к записи псевдо -атрибута . Я бы попробовал, так как последний ACL (не тестировался):
olcAccess: {2}to * by self read by * auth
Если у вас есть доступные 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 -ввод с разделителями ), чтобы специальные символы в именах файлов не вызывали проблем.
У вас есть несколько уровней для повторения? Если не?
rsync -aP books/*/*.epub books/*.epub /home/user/movedbooks/.
Утилита 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
.