rsync sahibi, grubu, zamanı ve izinleri yoksay


67

Özyinelemeli klasörlerle senkronize etmek için rsync'in nasıl kullanıldığını bilmek istiyorum ancak yalnızca yeni dosyaları veya güncellenmiş dosyaları (yalnızca sahibi, grubu veya zaman damgasını değil yalnızca içeriği) güncellemem gerekiyor ve kaynakta bulunmayan dosyaları silmek istiyorum .

Yanıtlar:


93

Kullanabileceğin düşünmek -no-için seçenekler rsynciçin değil sen Eşitleniyor ediyoruz dosyaların sahipliğini veya izinlerini kopyalayın.

Rsync Man Sayfasından Alıntı

--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).

Mülkiyet ve İzinler

Man sayfasına bakarak şöyle bir şey kullanmak isteyeceğine inanıyorum:

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

Var olmayan dosyaları silmek için --deletedüğmeyi kullanabilirsiniz :

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

Zaman damgaları

Zaman damgası gelince, SOURCE ve DEST dosyalarının karşılaştırmasını nasıl yapacağınızı değiştirmeden bunu korumanın bir yolunu görmüyorum. rsyncBu anahtarı kullanarak zaman damgalarını yoksaymayı söylemek isteyebilirsiniz :

-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.

Güncelleme

Zaman damgaları --no-timesiçin aradığınızı yapabilirsiniz.


- no-times kullanırken hala işaretlenmiş >f..T...ve işaretleme zamanı değiştirildiğini gösteren ve üzerinde kaçınılmaya çalıştığımı belirten birçok işaret görmekteyim (ayrıntılı değişikliklerle) işaretlenmiş birçok dosya görüyorum .
Michael

17

-A seçeneğinden kaçınmanın daha kolay olduğunu düşünüyorum

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

ve sadece istediğiniz seçenekleri ayarlayın.

Eğer tüm seçenekleri beğenirseniz , ancak -o , -g , -g , time -t ve permections -p kullanıcılarının değişikliklerini yapmazsanız, bu dört seçeneği arşiv eşdeğerinden çıkarabilirsiniz.

$ -rlD

Hedefteki dosyaları silmek için lütfen --delete seçeneğini kullanın .

Sorunuz: Ancak tüm dosyaların kontrol edileceğini düşünüyorum - rsync yalnızca içeriklere göre değişen dosyaları aktaramaz / kontrol edemez.


-llinkler, -Dcihazlar (aynı şekilde değerlendirilir --specials), -riçerikten bahsettiğimizde tek başına yeterli olduğunu düşünüyorum .
sdkks

7

Sanırım aradığın seçenek bu.

rsync -r --size-only

man sayfasından:

--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.

Gerçekten kaynak dir kullanımda eksik dosyaları silmek istiyorsanız --delete


4

Dosya mod zamanına ve boyutuna göre kontrolleri görmezden gelmek için rsync'i zorlayabilir ve "-c" anahtarını kullanarak chksum tabanlı bir yaklaşım kullanabilirsiniz.

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

Bu, dosya zamanının ve boyutunun uyuşup uyuşmadığına bakılmaksızın, tüm dosyayı parçalarda karşılaştırması (ve bunun için kaynak ile hedef arasında ilgili meta verileri ileri geri aktarması) anlamına gelir, ancak yalnızca farklı olan parçaları aktarır. kaynak ve hedef arasında.

Bu anahtarın başkaları tarafından önerilen diğer anahtarlarla birlikte kullanılması, kopyalananı sınırlamalıdır (yalnızca kopyalananı kopyalar) ve kaynak ile hedef arasında tutarlılık kontrolü yapma avantajına sahiptir, ancak bağlantı hızınıza bağlı olarak daha uzun sürer her iki tarafta da dosya yığınlarını chksum ve karşılaştırmak zorundadır).


OP'nin aklında olanın bu olduğundan şüpheliyim. Sorun, dosyaların nasıl seçildiğiyle ilgili değildi, ancak kopyalanan özellikler ve seçilen (en çok oy alan) yanıtı zaten bunu kapsıyordu.
Julie Pelletier

-3

Altında komut mükemmel çalışacak, kendi ihtiyacım için test ettim, sadece içerik değişikliği alacak.

rsync -acvzh source/ destination/
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.