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
คำสั่งที่เหมาะสม
สิ่งนี้ถือว่าไม่มีไฟล์ที่ไม่สามารถอ่านได้ซึ่งมีชื่อขึ้นบรรทัดใหม่ หากคุณต้องการรับมือกับสิ่งเหล่านี้คุณจะต้องสร้างรายการไฟล์ที่มีการคั่นด้วย null เช่นนี้และส่ง-0
ตัวเลือกไปที่rsync
:
find . \( ! -readable -o -type d ! -executable \) -print0 |
perl -0000 -pe 's:\A\./:/:' -e 's:[?*\\[]:$1:g' >>"$exclude_file"