Rsync no tiene una opción para esto. Veo dos soluciones. Una es analizar los mensajes de error de rsync; Esto no es muy robusto. El otro es generar una lista de archivos ilegibles 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"
Si find
no tiene -readable
y -executable
, reemplácelos por la -perm
directiva correspondiente .
Esto supone que no hay archivos ilegibles cuyo nombre contenga una nueva línea. Si necesita hacer frente a ellos, deberá generar una lista de archivos delimitados por nulos como esta, y pasar la -0
opción a rsync
:
find . \( ! -readable -o -type d ! -executable \) -print0 |
perl -0000 -pe 's:\A\./:/:' -e 's:[?*\\[]:$1:g' >>"$exclude_file"