rsync mengabaikan pemilik, grup, waktu, dan perm

67

Saya ingin tahu bagaimana menggunakan rsync untuk sinkronisasi ke folder rekursif tapi saya hanya perlu memperbarui file baru atau file yang diperbarui (hanya konten bukan pemilik, grup atau stempel waktu) dan saya ingin menghapus file yang tidak ada di sumbernya .

alsanal
sumber

Jawaban:

94

Saya pikir Anda dapat menggunakan -no-opsi rsyncuntuk TIDAK menyalin kepemilikan atau izin file yang sedang Anda sinkronkan.

Kutipan dari rsync Man Page

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

Kepemilikan & Izin

Melihat-lihat halaman manual saya yakin Anda ingin menggunakan sesuatu seperti ini:

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

Untuk menghapus file yang tidak ada, Anda dapat menggunakan --deletesakelar:

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

Cap waktu

Adapun cap waktu saya tidak melihat cara untuk menjaga ini tanpa mengubah bagaimana Anda akan melakukan perbandingan file SUMBER vs DEST. Anda mungkin ingin mengatakan rsyncuntuk mengabaikan cap waktu menggunakan sakelar ini:

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

Memperbarui

Untuk cap waktu, --no-timeslakukan apa yang Anda cari.

slm
sumber
saat menggunakan --tidak-kali saya masih melihat banyak file (dengan perubahan terperinci) ditandai menggunakan >f..T...yang menunjukkan fileflags dan waktu modifikasi sedang ditetapkan pada tujuan, yang adalah apa yang saya coba hindari.
Michael
17

Saya pikir lebih mudah untuk menghindari opsi -a

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

dan atur hanya opsi yang Anda inginkan.

Jika Anda menyukai semua opsi tetapi tidak modifikasi pengguna -o , grup -g , time -t dan izin -p sehingga Anda bisa mengurangi keempat opsi ini dari arsip yang setara.

$ -rlD

Untuk menghapus file pada tujuan, gunakan opsi --delete .

Untuk pertanyaan Anda: Tapi saya pikir semua file akan diperiksa - rsync tidak dapat mentransfer / memeriksa hanya file yang diubah hanya oleh konten.

Pengguna Pengguna
sumber
-ladalah untuk tautan, -Dperangkat (diperlakukan sama dengan --specials), saya pikir -rsendiri sudah cukup jika kita berbicara konten.
sdkks
7

Saya pikir apa yang Anda cari adalah pilihannya

rsync -r --size-only

dari halaman manual:

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

Jika Anda benar-benar ingin menghapus file yang hilang dalam penggunaan sumber dir --delete

rubo77
sumber
4

Anda dapat memaksa rsync untuk mengabaikan pemeriksaan berdasarkan waktu dan ukuran file mod dan menggunakan pendekatan berbasis chksum dengan tombol "-c".

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

Ini berarti bahwa perlu membandingkan seluruh file dalam potongan (dan mentransfer metadata yang relevan bolak-balik antara sumber dan tujuan agar hal ini terjadi) terlepas dari apakah waktu dan ukuran file cocok atau tidak, tetapi hanya akan mentransfer potongan yang berbeda antara sumber dan tujuan.

Menggunakan switch ini bersama dengan switch lain yang disarankan oleh orang lain harus membatasi apa yang disalin (hanya menyalin apa yang telah berubah), dan memiliki manfaat melakukan pemeriksaan konsistensi antara sumber dan tujuan, TETAPI itu memakan waktu lebih lama tergantung pada kecepatan tautan Anda sebagai harus chksum potongan file di kedua sisi dan bandingkan).

Anthony DFH
sumber
Saya ragu itulah yang ada dalam pikiran OP. Masalahnya tampaknya tidak terkait dengan bagaimana file dipilih tetapi atribut disalin, dan jawaban yang dipilih (paling banyak dipilih juga) sudah mencakup itu.
Julie Pelletier
-3

Perintah di bawah ini akan bekerja dengan sempurna, saya mengujinya untuk kebutuhan saya sendiri, hanya akan mengambil perubahan konten.

rsync -acvzh source/ destination/
Charles J
sumber