Sinkronkan dua folder lokal di bash

23

Saya memiliki satu folder besar "X" di direktori home saya, dan salinannya sudah kadaluwarsa pada flash drive - Y. Apa analognya rm Y; cp X Y, tetapi tanpa menimpa file yang sudah ada?

Jofsey
sumber

Jawaban:

26

Ada lebih banyak properti untuk rsync dari jawaban sebelumnya yang disebutkan. Anda harus melihatnya sendiri:

man rsync

Tetapi untuk masalah Anda, saya sarankan:

rsync -a --delete X Y

Dengan cara ini, penerima (Y) akan menghapus file apa pun yang tidak ada dalam X. Pastikan Anda melakukannya dengan benar. Digunakan secara salah karena root dapat dengan mudah membunuh sistem Anda ... :)

Mattias Åslund
sumber
1
Setuju bahwa Anda harus sangat berhati-hati dengan ini. Coba tambahkan --dry-run ke perintah untuk melihat apa yang akan terjadi tanpa benar-benar membuat perubahan. Jika berjalan lancar lakukan perintah yang sama tanpa --dry-run
squarecandy
Sebuah koreksi kecil yang membawa saya beberapa saat untuk mencapai: rsync -a --delete X/ Y. Garis miring kecil setelah X membuatnya bekerja seperti yang dimaksudkan untukku, jadi itu mungkin bisa membantu yang lain juga. Dijelaskan di sini: abbeyworkshop.com/howto/unix/nix_rsync/index.html
Shovalt
15

Lihatlah rsync (1) . Ini dimaksudkan untuk melakukan apa yang Anda inginkan.

rsync -av X Y

Ini mendukung penyalinan jarak jauh, melalui protokol atau ssh sendiri, tetapi juga dapat digunakan secara lokal.

Bergantung pada perilaku persis yang Anda inginkan, Anda mungkin juga ingin meneruskan --updateopsi. Ini akan memberitahu rsync untuk tidak menimpa file yang sudah ada pada target dan lebih baru dari yang ada di sumber.

Jika Anda ingin menghapus file tambahan (yaitu file yang ada di Y, tetapi tidak di X) Anda dapat menambahkan --deleteopsi.

Kristof Provost
sumber
Tapi itu tidak akan menghapus file, selain dihapus di X, sementara rm Y; cp X Yakan.
Untuk menghapus file yang dihapus dari X, gunakan opsi --delete.
csonuryilmaz
0

Coba gunakan rsnyc, mungkin dengan perintah berikut:

rsync -avzu /home/x /y

-u = jangan menimpa file di tujuan, jika itu diubah

bwDraco
sumber
Tapi itu tidak akan menghapus file, selain dihapus di X, sementara rm Y; cp X Yakan.
0

Saya pikir beberapa fungsi yang Anda cari di opsi -u (pembaruan) sebenarnya ada di opsi ini:

"--ignore-existing" - lewati memperbarui file yang ada pada receiver

pendahuluan
sumber