rsync bỏ qua chủ sở hữu, nhóm, thời gian và perm


67

Tôi muốn biết cách sử dụng rsync để đồng bộ hóa với các thư mục đệ quy nhưng tôi chỉ cần cập nhật các tệp mới hoặc các tệp đã cập nhật (chỉ nội dung không phải là chủ sở hữu, nhóm hoặc dấu thời gian) và tôi muốn xóa các tệp không tồn tại trong nguồn. .

Câu trả lời:


93

Tôi nghĩ rằng bạn có thể sử dụng -no-tùy chọn để rsyncđến KHÔNG sao chép các quyền sở hữu hoặc quyền của các tập tin bạn đang sync'ing.

Trích từ trang rsync

--no-OPTION
       You may turn off one or more implied options by prefixing the option 
       name with "no-".  Not all options may be pre‐fixed  with  a  "no-":  
       only options that are implied by other options (e.g. --no-D, 
       --no-perms) or have different defaults in various circumstances (e.g. 
       --no-whole-file, --no-blocking-io, --no-dirs).  You may specify 
       either the short or the long option name after the "no-" prefix (e.g. 
       --no-R is the same as --no-relative).

       For example: if you want to use -a (--archive) but don’t want -o 
       (--owner), instead of converting -a into -rlptgD, you could specify 
       -a --no-o (or -a --no-owner).

       The order of the options is important:  if you specify --no-r -a, the 
       -r option would end up being turned on,  the opposite  of  -a  
       --no-r.   Note  also  that the side-effects of the --files-from 
       option are NOT positional, as it affects the default state of several 
       options and slightly changes the meaning of -a (see the  --files-from
       option for more details).

Quyền sở hữu & quyền

Nhìn qua trang người đàn ông tôi tin rằng bạn muốn sử dụng một cái gì đó như thế này:

$ rsync -avz --no-perms --no-owner --no-group ...

Để xóa các tập tin không tồn tại, bạn có thể sử dụng công --deletetắc:

$ rsync -avz --no-perms --no-owner --no-group --delete ....

Dấu thời gian

Đối với dấu thời gian, tôi không thấy cách nào để giữ điều này mà không thay đổi cách bạn so sánh các tệp SOURCE so với DEST. Bạn có thể muốn nói rsyncbỏ qua dấu thời gian bằng cách sử dụng công tắc này:

-I, --ignore-times
       Normally  rsync will skip any files that are already the same size 
       and have the same modification timestamp.  This option turns off this 
       "quick check" behavior, causing all files to be updated.

Cập nhật

Đối với dấu thời gian, --no-timescó thể làm những gì bạn đang tìm kiếm.


khi sử dụng - lần này tôi vẫn thấy rất nhiều tệp (với các thay đổi được chia thành từng mục) được đánh dấu bằng cách sử dụng >f..T...gợi ý các tệp và thời gian sửa đổi đang được đặt ở đích, đó là điều tôi đang cố gắng tránh.
Michael

17

Tôi nghĩ rằng nó dễ dàng hơn để tránh tùy chọn -a

$ -a, --archive               archive mode; equals -rlptgoD (no -H,-A,-X)

và chỉ đặt các tùy chọn bạn muốn.

Nếu bạn thích tất cả các tùy chọn nhưng không phải là sửa đổi của người dùng -o , nhóm -g , thời gian -t và quyền -p để bạn có thể trừ bốn tùy chọn này khỏi kho lưu trữ tương đương.

$ -rlD

Để xóa các tệp trên đích, vui lòng sử dụng tùy chọn - xóa .

Đối với câu hỏi của bạn: Nhưng tôi nghĩ rằng tất cả các tệp sẽ được kiểm tra - rsync có thể chuyển đổi / kiểm tra các tệp chỉ thay đổi theo nội dung.


-llà dành cho các liên kết, -Dthiết bị (được đối xử như --specials), tôi nghĩ -rmột mình là đủ nếu chúng ta đang nói nội dung.
sdkks

7

Tôi nghĩ rằng những gì bạn đang tìm kiếm là tùy chọn

rsync -r --size-only

từ trang người đàn ông:

--size-only
   This  modifies  rsync’s  "quick  check"  algorithm  for finding files that need to be transferred,
   changing it from the default of transferring files  with  either  a  changed  size  or  a  changed
   last-modified  time  to  just  looking  for  files that have changed in size.  This is useful when
   starting to use rsync after using another mirroring  system  which  may  not  preserve  timestamps
   exactly.

Nếu bạn thực sự muốn xóa các tập tin bị thiếu trong thư mục nguồn, hãy sử dụng --delete


4

Bạn có thể buộc rsync bỏ qua các kiểm tra dựa trên thời gian và kích thước mod của tệp và sử dụng phương pháp tiếp cận dựa trên chksum với công tắc "-c".

-c, --checksum              skip based on checksum, not mod-time & size

Điều này không có nghĩa là nó cần so sánh toàn bộ tệp theo từng khối (và chuyển siêu dữ liệu liên quan qua lại giữa nguồn và đích để điều này xảy ra) bất kể thời gian và kích thước tệp có khớp hay không, nhưng sẽ chỉ chuyển các khối khác nhau giữa nguồn và đích.

Sử dụng công tắc này kết hợp với các công tắc khác do người khác đề xuất sẽ hạn chế những gì được sao chép (chỉ sao chép đã thay đổi) và có lợi ích khi kiểm tra tính nhất quán giữa nguồn và đích, NHƯNG mất nhiều thời gian hơn tùy thuộc vào tốc độ liên kết của bạn như nó phải chksum các đoạn tập tin ở cả hai bên và so sánh).


Tôi nghi ngờ đó là những gì OP có trong tâm trí. Vấn đề dường như không liên quan đến cách các tệp được chọn nhưng các thuộc tính được sao chép và câu trả lời được chọn (hầu hết cũng được nêu lên) đã bao hàm điều đó.
Julie Pelletier

-3

Lệnh dưới đây sẽ hoạt động hoàn hảo, tôi đã thử nghiệm nó cho yêu cầu của riêng tôi, nó sẽ chỉ thay đổi nội dung.

rsync -acvzh source/ destination/
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.