У 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"