Rsync не имеет возможности для этого. Я вижу два решения. Одним из них является анализ сообщений об ошибках rsync; это не очень надежно Другой - создать список нечитаемых файлов для фильтрации.
cd /source/directory
exclude_file=$(mktemp)
find . ! -readable -o -type d ! -executable |
sed -e 's:^\./:/:' -e 's:[?*\\[]:\\1:g' >>"$exclude_file"
rsync -rlptD --exclude-from="$exclude_file" . /target/directory
rm "$exclude_file"
Если у вас find
нет -readable
и -executable
замените их соответствующей -perm
директивой.
Это предполагает, что нет нечитаемых файлов, имя которых содержит символ новой строки. Если вам нужно справиться с этим, вам нужно создать список файлов с нулевым разделением, как этот, и передать -0
параметр rsync
:
find . \( ! -readable -o -type d ! -executable \) -print0 |
perl -0000 -pe 's:\A\./:/:' -e 's:[?*\\[]:$1:g' >>"$exclude_file"