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. A outra é 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 o seu find
não tiver -readable
e -executable
, substitua-os pela diretiva -perm
apropriada.
Isso pressupõe que não há arquivos ilegíveis cujo nome contenha uma nova linha. Se você precisar lidar com isso, será necessário produzir uma lista de arquivos delimitada por nulo como esta e passar a opção -0
para rsync
:
find . \( ! -readable -o -type d ! -executable \) -print0 |
perl -0000 -pe 's:\A\./:/:' -e 's:[?*\[]:$1:g' >>"$exclude_file"