Cara rsync hanya file baru

144

Saya mencoba mengatur rsync untuk menyinkronkan server web utama saya ke server jarak jauh dengan menambahkan file yang baru dibuat ke nanti.

Inilah perintah yang saya gunakan:

rsync -avh --update -e "ssh -i /path/to/thishost-rsync-key" remoteuser@remotehost:/foo/bar /foo/bar

Tetapi tampaknya server web benar-benar mentransfer semua file meskipun ada tanda '--perbarui'. Saya telah mencoba kombinasi flag yang berbeda (mis. Menghilangkan '-a' dan menggunakan '-uv' sebagai gantinya) tetapi tidak ada yang membantu. Jadi bertanya-tanya bagaimana saya bisa memodifikasi perintah rsync untuk mengirim hanya file yang baru ditambahkan. Terima kasih

supermario
sumber
2
Jika Anda ingin menyinkronkan file ke server jauh, bukankah seharusnya itu menjadi yang terakhir? yaitu rsync /foo/bar remoteuser@remotehost:/foo/bar
ostrokach
Anda bisa tertarik dengan halaman web ini . Juga, berhati-hatilah dengan sistem file. Jika filesystem server tidak mendukung semua -aopsi yang tersirat (pemilik, grup, perms, ...) itu harus menjadi penyebab masalah kami.
ppr
2
Tidak ada jawaban yang memecahkan masalah ketika file lokal tidak sepenuhnya disalin ke tujuan jarak jauh, dan Anda hanya ingin rsync file yang lebih baru.
Axel Bregnsbo
Saya baru saja menemukan -copsi. Itu melompati file yang ada berdasarkan pada checksum, bukan waktu atau ukuran modifikasi.
haheute

Jawaban:

181

Dari man rsync:

--ignore-existing       skip updating files that exist on receiver

--updatemelakukan sesuatu yang sedikit berbeda, yang mungkin mengapa Anda mendapatkan hasil yang tidak terduga (lihat man rsync):

Ini memaksa rsync untuk melewatkan file apa pun yang ada di tujuan dan memiliki waktu yang dimodifikasi yang lebih baru dari file sumber . (Jika file tujuan yang ada memiliki waktu modifikasi sama dengan file sumber, itu akan diperbarui jika ukurannya berbeda.)

Chris Down
sumber
1
Yah sebenarnya saya mencoba perintah dengan '--ignore-existing' bukan '--update'. Itu selesai dengan cepat tetapi tidak menempatkan file baru ke host jarak jauh. Ada ide? Terima kasih
supermario
13
Man pages menyedot (itu benar saya pergi ke sana), contohnya, apakah --ignore-existingberarti tidak mentransfer file yang ada pada penerima, atau tidak mentransfer file jika beberapa file / folder dengan nama yang sama ada pada penerima?
puk
7
--update tidak melewatkan file ketika mtimes identik (yang tidak sesuai dengan kata-katanya). Saya menguji ini. Saya percaya kata-katanya akan lebih dipahami jika dikatakan "hanya file sumber yang lebih baru daripada tujuan yang akan disalin".
Octopus
4
@Octopus "hanya file sumber yang lebih baru daripada tujuan yang akan disalin" ... atau file sumber yang memiliki waktu modifikasi yang sama dengan rekan file tujuan, tetapi memiliki ukuran yang berbeda . Saya pikir itu poin penting. (Chris sudah membahas itu, terima kasih)
Jonathan Komar
Jadi, Anda perlu --ignore-existing dan -r (rekursif). -v (verbose) juga enak untuk dimiliki :-)
DutchUncle
40

Dalam kasus saya, saya memiliki masalah yang sama, semua file ditransfer bukan hanya yang dimodifikasi / baru. Saya memecahkan ini dengan menggunakan parameter -t(bukan -a), dan -P(setara dengan --partial --progress):

rsync -h -v -r -P -t target sumber

Ini hanya mentransfer file baru, dan file yang sudah ada tetapi diubah: -atidak terlalu banyak, seperti sinkronisasi ID pengguna dan grup, yang dalam kasus saya tidak dapat berfungsi karena saya memiliki pengguna dan grup yang berbeda pada sumber dan sistem target saya.

Parameter secara rinci:

  • -h: angka yang dapat dibaca manusia
  • -v: verbose
  • -r: berulang ke direktori
  • -P: --partial(simpan sebagian file yang ditransfer) +
            --progress(tampilkan kemajuan selama transfer)
  • -t: pertahankan waktu modifikasi
t0r0X
sumber
2
Memberi +1 untuk '-sangat banyak` (memang -rlptgoD, jadi izin tidak diratakan, grup dan pemilik dipertahankan –bukan cadangan play-safe khas saya ...)
Frank Nocke
2

Dari pengalaman saya dengan rsync, penyalinan partisi 1TB terlalu besar untuk menjadi efisien. Dibutuhkan rsync selamanya untuk memprosesnya. Sebagai gantinya, lakukan dengan subdirektori. Yaitu, jalankan rsync untuk setiap subdirektori utama. Ini berjalan jauh lebih cepat jika tidak harus menyulap puluhan ribu file.

turgut kalfaoglu
sumber
1
Mungkin Anda kehabisan memori dan sistem Anda mulai bertukar?
Marcel Burkhard
-2

Mencoba

rsync -zvrt --update SOURCE DESTN
akhir
sumber
8
Penjelasan lebih lanjut untuk perintah di atas akan dihargai untuk OP.
Peschke
dari halaman manual `-u, --perbarui lewati file yang lebih baru pada receiver`
ShoeLace