Linux setara dengan robocopy?

34

Agak lucu, ada banyak cara di mana alat-alat baris perintah Linux jauh lebih unggul daripada yang Windows, tetapi satu hal yang saya belum menemukan setara dengan itu adalah robocopy . Robocopy jauh lebih fleksibel daripada cp, dan saya tidak tahu bagaimana melakukan apa yang saya inginkan dengan alat Linux.

Kasus penggunaan khusus adalah bahwa saya memiliki dua direktori dengan sebagian besar file yang mirip, tetapi satu memiliki file sumber yang lebih baru dan satu memiliki file konten yang tidak dimiliki direktori lain, dan mungkin file sumber yang lebih baru (untuk situs web). Saya ingin menyalin file dari direktori terakhir ke yang pertama, menambahkan file konten baru dan semacamnya, tetapi tidak menimpa file yang lebih baru di direktori tujuan.

Saya mencoba mencari cara untuk melakukan ini di Linux selama mungkin setengah jam, memutuskan bahwa saya mungkin harus belajar bash scripting atau sesuatu untuk melakukan apa yang saya inginkan, dan kemudian saya menyadari bahwa saya bisa menggunakan robocopy. Saya juga punya beberapa persyaratan lain. Saya pada dasarnya mengubah situs web Python (Django) dari repositori SVN ke repositori Git, dan saya ingin memastikan bahwa saya tidak memiliki perubahan yang tidak terikat pada SVN. Namun, saya ingin mengecualikan .svndirektori dan .pycfile Python yang dikompilasi secara kondisional . Perintah robocopy berikut melakukan apa yang saya inginkan:

robocopy source destination /XO /E /XD .svn /XF *.pyc

Apakah ada yang setara dengan Robocopy di Linux? Saya melihat rsyncsebentar, tetapi sepertinya saya harus mengatur server rsync sebelum mencoba menyinkronkan folder.

Ibrahim
sumber
1
Anda tidak perlu mengatur server rsync, rsync over ssh secara otomatis menjalankan rsync pada mesin jarak jauh dalam mode server (dengan cara yang hanya digunakan untuk koneksi itu, berjalan di bawah akun Anda sendiri, dan ditutup secara otomatis ketika sudah selesai) .
CesarB
"... tapi sepertinya aku harus menyiapkan server rsync sebelum mencoba menyinkronkan folder." Saya telah menggunakan Rsync selama bertahun-tahun dan tidak pernah harus mengatur server Rsync formal. Bahkan banyak alat sinkronisasi / cadangan pada macOS menggunakan Rsync sebagai intinya tanpa perlu men-setup server seperti Carbon Copy Cloner dan — saya percaya — SuperDuper!
JakeGould

Jawaban:

38

Kedengarannya seperti rsync yang pasti Anda cari Anda tidak perlu mengatur 'server rsync' untuk menyalin file dari satu mesin ke komputer lain. Rsync mendukung penyalinan file melalui SFTP (SSH File Transfer) yang sebagian besar kotak linux sudah aktifkan (jika tidak dinonaktifkan secara manual).

Lihat file Mirror Lifehacker di seluruh sistem dengan rsync untuk detail lebih lanjut:

Apakah Anda ingin membuat cadangan data Anda, mendistribusikan file dengan aman atau mirror dokumen kerja Anda melalui internet dari kantor ke rumah, antara komputer di jaringan lokal Anda, atau dari komputer Anda ke server web Anda, rsync dapat menyelesaikan pekerjaan. Hari ini kita akan menggunakan rsync untuk mirror folder antara Mac dan PC melalui koneksi aman di baris perintah.

Rsync gratis (seperti dalam ucapan) dan lintas platform, yang berarti sinkronisasi file antara sistem operasi (Windows / Cygwin, Mac OS, Linux); ini bekerja lebih dari ssh sehingga terenkripsi dan aman tidak seperti FTP tambahan , jadi hanya bagian dari file yang diubah yang ditransfer, bukan seluruh file , yang membuatnya seperti Speedy Gonzalez; dan fakta bahwa itu adalah command line membuatnya bisa script dan mudah otomatis.

Josh Hunt
sumber
Baca halaman manual rsync - untuk menggunakan ssh (tanpa server rsync eksplisit) Anda akan menggunakan "-e ssh"
Doug Harris
1
rsync luar biasa! Dan Anda tidak perlu menggunakan -e karena setiap jalur seperti [email protected]: / blah / secara otomatis akan menggunakannya.
The How-To Geek
Mmm, itu keren. Jadi pada dasarnya dapat menggunakan scpsintaks seperti untuk mentransfer lebih dari ssh? Saya sebenarnya mencoba mentransfer file pada satu mesin, tetapi itu bagus untuk diketahui.
Ibrahim
1
Sayangnya, jawaban ini tidak sepenuhnya benar: Meskipun menggunakan SSH, ia tidak menggunakan SFTP. Sebagai gantinya, ia berkomunikasi dengan instance rsync jauh secara langsung menggunakan protokol rsync.
Daniel B
15

rsync akan menyalin file dari satu direktori ke direktori lain di mesin yang sama seperti robocopy. Ini adalah perintah rsync yang setara dengan perintah robocopy Anda:

rsync -auv --exclude '.svn' --exclude '*.pyc' source destination

Ini secara rekursif akan menyalin sumber ke tujuan dan mengecualikan file yang lebih lama serta direktori / file '.svn' dan '* .pyc'.

Sean Staats
sumber
Kecuali itu akan melakukannya dengan cara berulir tunggal, yang dapat menghasilkan lebih dari 5x kinerja hit tergantung pada jumlah tipuan dalam solusi penyimpanan Anda.
Mikhail
Ketika file dihapus dari sumber, itu tidak disinkronkan ke tujuan.
Jirong Hu