GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara menyinkronkan dua folder dengan alat baris perintah?

Ini menempatkan folder A ke dalam folder B:

rsync -avu --delete "/home/user/A" "/home/user/B"  

Jika Anda menginginkan isi folder A dan B agar sama, masukkan /home/user/A/ (dengan garis miring) sebagai sumbernya. Ini tidak mengambil folder A tetapi semua isinya dan memasukkannya ke folder B. Seperti ini:

rsync -avu --delete "/home/user/A/" "/home/user/B"
  • -a Lakukan sinkronisasi dengan mempertahankan semua atribut sistem file
  • -v jalankan secara verbal
  • -u hanya salin file dengan waktu modifikasi yang lebih baru (atau perbedaan ukuran jika waktunya sama)
  • --delete hapus file di folder target yang tidak ada di sumber

Halaman manual:https://download.samba.org/pub/rsync/rsync.html


Anda bisa unison alat yang dikembangkan oleh Benjamin Pierce di U Penn.

Anggaplah Anda memiliki dua direktori,

/home/user/Documents/dirA/ dan /home/user/Documents/dirB/

Untuk menyinkronkan keduanya, Anda dapat menggunakan:

~$unison -ui text /home/user/Documents/dirA/ /home/user/Documents/dirB/

Di keluaran, unison akan menampilkan setiap direktori dan file yang berbeda di dua direktori yang Anda minta untuk disinkronkan. Ini akan merekomendasikan untuk menyinkronkan secara tambahan (mereplikasi file yang hilang di kedua lokasi) pada proses awal, kemudian membuat dan memelihara pohon sinkronisasi pada mesin Anda, dan pada proses selanjutnya akan menerapkan sinkronisasi yang sebenarnya (yaitu, jika Anda menghapus file dari .../dirA , itu akan dihapus dari .../dirB demikian juga. Anda juga dapat membandingkan setiap perubahan dan secara opsional memilih untuk teruskan atau terbalik sinkronisasi antara dua direktori.

Opsional, untuk meluncurkan antarmuka grafis, cukup hapus -ui text opsi dari perintah Anda, meskipun saya menemukan cli lebih sederhana dan lebih cepat untuk digunakan.

Lebih lanjut tentang ini:Tutorial Unison di dokumentasi pengguna Unison.


Jawaban dari TuxForLife cukup bagus, tetapi saya sangat menyarankan Anda menggunakan -c saat menyinkronkan secara lokal. Anda dapat berargumen bahwa itu tidak sepadan dengan hukuman waktu/jaringan untuk melakukannya untuk sinkronisasi jarak jauh, tetapi itu sangat berharga untuk file lokal karena kecepatannya sangat tinggi.

-c, --checksum
       This forces the sender to checksum every regular file using a 128-bit  MD4
       checksum.   It  does this during the initial file-system scan as it builds
       the list of all available files. The receiver then checksums  its  version
       of  each  file  (if  it exists and it has the same size as its sender-side
       counterpart) in order to decide which files need to be updated: files with
       either  a  changed  size  or a changed checksum are selected for transfer.
       Since this whole-file checksumming of all files on both sides of the  con-
       nection  occurs  in  addition to the automatic checksum verifications that
       occur during a file's transfer, this option can be quite slow.

       Note that rsync always verifies that each transferred file  was  correctly
       reconstructed  on  the receiving side by checking its whole-file checksum,
       but that automatic after-the-transfer verification has nothing to do  with
       this  option's  before-the-transfer  "Does  this file need to be updated?"
       check.

Ini menunjukkan bagaimana memiliki ukuran dan stempel waktu yang sama dapat mengecewakan Anda.

Penyiapan

$ cd /tmp

$ mkdir -p {A,b}/1/2/{3,4}

$ echo "\___________from A" | \
      tee A/1/2/x  | tee A/1/2/3/y  | tee A/1/2/4/z  | \
  tr A b | \
      tee b/1/2/x  | tee b/1/2/3/y  | tee b/1/2/4/z  | \
      tee b/1/2/x0 | tee b/1/2/3/y0 >     b/1/2/4/z0

$ find A b -type f | xargs -I% sh -c "echo %; cat %;"
A/1/2/3/y
\___________from A
A/1/2/4/z
\___________from A
A/1/2/x
\___________from A
b/1/2/3/y
\___________from b
b/1/2/3/y0
\___________from b
b/1/2/4/z
\___________from b
b/1/2/4/z0
\___________from b
b/1/2/x
\___________from b
b/1/2/x0
\___________from b

Rsync yang tidak menyalin apa pun karena semua file memiliki ukuran dan stempel waktu yang sama

$ rsync -avu A/ b
building file list ... done

sent 138 bytes  received 20 bytes  316.00 bytes/sec
total size is 57  speedup is 0.36

$ find A b -type f | xargs -I% sh -c "echo %; cat %;"
A/1/2/3/y
\___________from A
A/1/2/4/z
\___________from A
A/1/2/x
\___________from A
b/1/2/3/y
\___________from b
b/1/2/3/y0
\___________from b
b/1/2/4/z
\___________from b
b/1/2/4/z0
\___________from b
b/1/2/x
\___________from b
b/1/2/x0
\___________from b    

Rsync yang bekerja dengan benar karena membandingkan checksum

$ rsync -cavu A/ b
building file list ... done
1/2/x
1/2/3/y
1/2/4/z

sent 381 bytes  received 86 bytes  934.00 bytes/sec
total size is 57  speedup is 0.12

$ find A b -type f | xargs -I% sh -c "echo %; cat %;"
A/1/2/3/y
\___________from A
A/1/2/4/z
\___________from A
A/1/2/x
\___________from A
b/1/2/3/y
\___________from A
b/1/2/3/y0
\___________from b
b/1/2/4/z
\___________from A
b/1/2/4/z0
\___________from b
b/1/2/x
\___________from A
b/1/2/x0
\___________from b

Linux
  1. Linux – Bagaimana Menyinkronkan Dua Folder Dengan Alat Baris Perintah?

  2. Bagaimana cara mengurutkan file ke dalam folder berdasarkan tipe file di bash (dengan perintah 'file')?

  3. Bagaimana cara mengubah PDF menjadi JPG dengan baris perintah di Linux?

  1. Cara Reboot Linux Menggunakan Command Line

  2. Cara Menghapus File dengan Ekstensi Tertentu di Baris Perintah Linux

  3. Bagaimana cara mengonversi dokumen DjVu ke PDF di Linux hanya menggunakan alat baris perintah?

  1. Bagaimana cara mengganti file di jar dengan baris perintah di linux?

  2. Sinkronkan dua folder lokal di bash

  3. Bagaimana cara membuat file dengan ukuran tertentu dari baris perintah?