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
निर्देश द्वारा प्रतिस्थापित करें ।
यह मानता है कि ऐसी कोई अपठनीय फ़ाइलें नहीं हैं जिनके नाम में एक नई पंक्ति है। यदि आपको उन लोगों के साथ सामना करने की आवश्यकता है, तो आपको इस तरह से एक शून्य-सीमांकित फ़ाइल सूची का उत्पादन करने की आवश्यकता होगी, और इसके लिए -0
विकल्प पास करें rsync
:
find . \( ! -readable -o -type d ! -executable \) -print0 |
perl -0000 -pe 's:\A\./:/:' -e 's:[?*\\[]:$1:g' >>"$exclude_file"