O Rsync não tem uma opção para isso. Eu vejo duas soluções. Uma é analisar as mensagens de erro do rsync; isso não é muito robusto. O outro é gerar uma lista de arquivos ilegíveis para filtrar.
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"
Se você find
não possui -readable
e -executable
, substitua-os pela -perm
diretiva apropriada .
Isso pressupõe que não há arquivos ilegíveis cujo nome contenha uma nova linha. Se você precisar lidar com isso, precisará produzir uma lista de arquivos delimitada por nulos como esta e passar a -0
opção pararsync
:
find . \( ! -readable -o -type d ! -executable \) -print0 |
perl -0000 -pe 's:\A\./:/:' -e 's:[?*\\[]:$1:g' >>"$exclude_file"