Rsync không có tùy chọn cho việc này. Tôi thấy hai giải pháp. Một là phân tích các thông báo lỗi rsync; Điều này không phải là rất mạnh mẽ. Hai là để tạo một danh sách các tập tin không thể đọc được để lọc.
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"
Nếu bạn find
không có -readable
và -executable
, thay thế chúng bằng -perm
chỉ thị thích hợp .
Điều này giả định rằng không có tệp không thể đọc được có tên chứa dòng mới. Nếu bạn cần đối phó với những thứ đó, bạn sẽ cần tạo một danh sách tệp được phân tách bằng null như thế này và chuyển -0
tùy chọn tới rsync
:
find . \( ! -readable -o -type d ! -executable \) -print0 |
perl -0000 -pe 's:\A\./:/:' -e 's:[?*\\[]:$1:g' >>"$exclude_file"