rsync phàn nàn về symlink


7

Tôi đang sử dụng dry-runtùy chọn (-n) rsyncđể so sánh các thư mục trên hai hệ thống khác nhau. Tất cả mọi thứ hoạt động tốt với các tập tin và thư mục tiêu chuẩn. Tuy nhiên, khi tôi sử dụng một thư mục bao gồm các liên kết tượng trưng, ​​tôi gặp lỗi:

> ls -l /usr/user1/server10s/system/
total 1
lrwxrwxrwx   1 localuser  other         37 Jun 19 17:18 nrcalc -> /usr/user2/nrcalc10s
> rsync -n -avrc /usr/user1/server10s/* aisdba@Server:deployment_area/server
building file list ... done
system/
cannot delete non-empty directory: system/nrcalc
could not make way for new symlink: system/nrcalc
template/
template/nrcalc
sent 190 bytes  received 24 bytes  38.91 bytes/sec
total size is 330  speedup is 1.54
rsync error: some files could not be transferred (code 23) at main.c(692)

Tôi khá vui vì nó không thể xóa thư mục, vì tôi không thực sự cố gắng thay đổi bất cứ điều gì, nhưng tại sao nó thậm chí còn cố gắng? BTW, tôi đã thử thêm cả hai tùy chọn -l(liên kết) và -K(sao chép liên kết), không có hiệu lực.

Làm thế nào tôi có thể có được sự so sánh này để làm việc ngay cả với các liên kết tượng trưng trong cấu trúc thư mục?

Câu trả lời:


7

Như bạn đã chỉ ra, system/nrcalclà một liên kết tượng trưng trên hệ thống cục bộ, nhưng nó là một thư mục trên máy chủ từ xa. Nếu thư mục trên hệ thống từ xa không trống, rsync sẽ từ chối xóa nó (để nhường đường cho symlink) trừ khi bạn chỉ định --forcehoặc một trong các --deletetùy chọn. Nếu bạn không muốn thay thế thư mục ở phía xa, nhưng bạn vẫn cần cập nhật nó với nội dung được trỏ bởi liên kết tượng trưng cục bộ, bạn có thể sử dụng --copy-dirlinks.

Rupync phàn nàn về điều này ngay cả khi --dry-runđược chỉ định để cảnh báo bạn về thực tế rằng nó sẽ cần xóa thư mục ở phía xa để thực hiện những gì bạn yêu cầu. Sử dụng bất kỳ tùy chọn nào tôi đã đề cập cùng với -nsẽ cung cấp cho bạn một hoạt động khô ráo mà không thực sự xóa bất cứ điều gì.

Đối với các tùy chọn khác bạn đã thử:

  • Các -Ktùy chọn ( --keep-dirlinks) là tương đương --copy-dirlinks, ngoại trừ ở phía đích. Symlink của bạn nằm ở phía nguồn, đó là lý do tại sao tùy chọn này không có tác dụng với bạn.

  • Các -ltùy chọn ( --links) đảm bảo rằng liên kết tượng trưng được sao chép như liên kết tượng trưng, nhưng một lần nữa, mà không --forcehay --delete, rsync sẽ từ chối để thay thế một thư mục khác rỗng với một liên kết tượng trưng. Ngoài ra, -angụ ý -l, vì vậy dù sao bạn cũng đã sử dụng nó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.