Rsync tidak memiliki opsi untuk ini. Saya melihat dua solusi. Salah satunya adalah untuk mem-parsing pesan kesalahan rsync; ini tidak terlalu kuat. Yang lainnya adalah membuat daftar file yang tidak dapat dibaca untuk difilter.
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"
Jika Anda find
tidak memiliki -readable
dan -executable
, ganti dengan -perm
arahan yang sesuai .
Ini mengasumsikan bahwa tidak ada file yang tidak dapat dibaca yang namanya berisi baris baru. Jika Anda perlu mengatasinya, Anda harus membuat daftar file yang dibatasi nol seperti ini, dan meneruskan -0
opsi ke rsync
:
find . \( ! -readable -o -type d ! -executable \) -print0 |
perl -0000 -pe 's:\A\./:/:' -e 's:[?*\\[]:$1:g' >>"$exclude_file"