Setelah bermigrasi ke Linux dari Windows, saya ingin mencari perangkat lunak alternatif untuk Winmerge atau lebih tepatnya mempelajari alat-alat baris perintah untuk membandingkan dan menyinkronkan dua folder di Linux. Saya akan berterima kasih jika Anda bisa memberi tahu saya bagaimana melakukan tugas-tugas berikut pada baris perintah ... (Saya telah mempelajari diff dan rsync, tapi saya masih butuh bantuan.)
Kami memiliki dua folder: "/ home / user / A" dan "/ home / user / B"
Folder A adalah tempat penyimpanan file dan folder biasa dan folder B adalah folder cadangan yang berfungsi sebagai cermin lengkap folder A. (Tidak ada yang langsung disimpan atau diubah oleh pengguna di folder B.)
Pertanyaan saya adalah:
Bagaimana daftar file yang hanya ada di folder B? (Misalnya yang dihapus dari folder A sejak sinkronisasi terakhir.)
Bagaimana cara menyalin file yang ada di folder B saja kembali ke folder A?
Bagaimana cara membuat daftar file yang ada di kedua folder tetapi memiliki cap waktu atau ukuran yang berbeda? (Yang telah dimodifikasi di folder A sejak sinkronisasi terakhir. Saya ingin menghindari menggunakan checksum, karena ada puluhan ribu file dan itu akan membuat prosesnya terlalu lambat.)
Bagaimana cara membuat salinan folder A ke dalam folder B? Maksud saya, salin semuanya dari folder A ke folder B yang hanya ada di folder A dan hapus semuanya dari folder B yang hanya ada di folder B, tetapi tanpa menyentuh file yang sama di kedua folder.
sumber
Jawaban:
Ini menempatkan folder A ke folder B:
Jika Anda ingin isi folder A dan B sama, masukkan
/home/user/A/
(dengan garis miring) sebagai sumber. Ini tidak mengambil folder A tetapi semua kontennya dan memasukkannya ke folder B. Seperti ini:-a
Lakukan sinkronisasi menjaga semua atribut sistem file-v
berjalan secara lisan-u
hanya menyalin file dengan waktu modifikasi yang lebih baru (atau perbedaan ukuran jika waktunya sama)--delete
hapus file di folder target yang tidak ada di sumberManpage: https://download.samba.org/pub/rsync/rsync.html
sumber
/home/user/B/A
alih - alih menimpa konten A ke konten B. Bisakah Anda membantu saya memeriksanya?Anda dapat menggunakan
unison
alat yang dikembangkan oleh Benjamin Pierce di U Penn.Mari kita asumsikan 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/
Dalam output,
unison
akan ditampilkan setiap direktori dan file yang berbeda di dua direktori yang Anda minta untuk disinkronkan. Ini akan merekomendasikan untuk menyinkronkan secara aditif (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 benar (yaitu, jika Anda menghapus file dari.../dirA
, itu akan dihapus.../dirB
juga. Anda juga dapat membandingkan setiap perubahan dan secara opsional memilih untuk meneruskan atau membalikkan sinkronisasi antara dua direktori.Secara opsional, untuk meluncurkan antarmuka grafis, cukup hapus
-ui text
opsi dari perintah Anda, meskipun saya menemukancli
lebih sederhana dan lebih cepat untuk digunakan.Lebih lanjut tentang ini: Tutorial serempak di dokumentasi pengguna Unison .
sumber
Jawaban dari TuxForLife cukup bagus, tetapi saya sangat menyarankan Anda gunakan
-c
saat menyinkronkan secara lokal. Anda dapat berargumen bahwa tidak sepadan dengan waktu / penalti jaringan untuk melakukannya untuk sinkronisasi jarak jauh, tetapi sangat layak untuk file lokal karena kecepatannya sangat besar.Ini menunjukkan bagaimana memiliki ukuran dan waktu yang sama dapat membuat Anda gagal.
Pengaturan
Rsync yang tidak menyalin apa pun karena semua file memiliki ukuran dan stempel waktu yang sama
Rsync yang berfungsi dengan benar karena membandingkan checksum
sumber
Ini adalah apa yang saya gunakan untuk membuat cadangan file pribadi, di mana saya tidak peduli dengan semua yang dicakup
-a
, dan ingin informasi yang lebih berguna dicetak.Dari halaman manual rsync :
Dari
rsync --info=help
Meskipun kurang eksplisit, ini tampaknya setara dan lebih pendek:
sumber
Ini tidak sepenuhnya sama dengan apa yang Anda minta, tetapi Anda dapat mempertimbangkan menggunakan alat kontrol versi. Alat-alat seperti Git melakukan semua yang Anda minta, dan banyak lagi, terutama jika Anda tidak bekerja di folder B secara langsung, mungkin menarik untuk melihatnya. Anda dapat menemukan informasi lebih lanjut tentang git di sini
sumber
Anda dapat menggunakannya dengan cara ini:
Dengan cara ini Anda akan menyalin konten folder A ke folder B, bukan konten folder A itu sendiri.
sumber