Я использую, rsync -rlptD
чтобы скопировать каталог от другого пользователя. Есть несколько файлов (я не знаю их заранее), которые я не имею права копировать. Есть ли способ, чтобы rsync игнорировал их? Проблема в том, что если rsync вернет ненулевое значение, мой скрипт bash -x завершится.
permissions
rsync
error-handling
JeffCharter
источник
источник
Ответы:
Rsync не имеет возможности для этого. Я вижу два решения. Одним из них является анализ сообщений об ошибках rsync; это не очень надежно Другой - создать список нечитаемых файлов для фильтрации.
Если у вас
find
нет-readable
и-executable
замените их соответствующей-perm
директивой.Это предполагает, что нет нечитаемых файлов, имя которых содержит символ новой строки. Если вам нужно справиться с этим, вам нужно создать список файлов с нулевым разделением, как этот, и передать
-0
параметрrsync
:источник
stat()
каждый файл дважды (один раз через rsync и один раз через find) было бы довольно плохо.\!
цитирует!
оператора, чтобы защитить его от расширения оболочки. Обратная косая черта здесь на самом деле не нужна, поскольку никакая оболочка не расширяется,!
когда за ней следует пробел, но это не повредит. Что не так со скрытыми файлами?Я сделал простой обходной путь для этой конкретной ситуации:
Это возвращает,
0
если возвращенный код был 0 или 23, и возвращает код завершения во всех других случаях.Однако важно отметить, что при этом будут игнорироваться все
Partial transfer due to error
ошибки, а не только ошибки разрешения , поскольку он будет перехватывать все, что выходит из кода.23
. Для получения дополнительной информации о кодах состояния rsync перейдите по этой ссылке .источник