Linux, robokopiye eşdeğer mi?


34

Çok komik, Linux komut satırı araçlarının Windows'lardan çok daha üstün olduğu bir çok yol var, ancak buna eşdeğer bulmadığım bir şey robocopy . Robocopy, çok daha yönlüdür cpve istediğim şeyi Linux araçlarıyla nasıl yapacağımı çözemiyorum.

Özel bir kullanım durumu, çoğunlukla benzer dosyalara sahip iki dizine sahip olduğum, ancak birinin daha yeni kaynak dosyalarına ve birisinin diğer dizinin sahip olmadığı içerik dosyalarına ve muhtemelen daha yeni kaynak dosyalarına (bir web sitesi için) sahip olmasıdır. Dosyaları ilk dizinden eskisine kopyalamak, yeni içerik dosyaları ekler ve hedef dizindeki daha yeni dosyaların üzerine yazmak istemiyorum.

Bunu Linux'ta yarım saatliğine nasıl yapacağımı anlamaya çalıştım, muhtemelen istediğim şeyi yapmak için bash betiği veya bir şeyler öğrenmem gerektiğine karar verdim ve sonra sadece robokopi kullanabileceğimi fark ettim. Benim de başka gereksinimlerim vardı. Temel olarak bir Python (Django) web sitesini bir SVN deposundan Git deposuna dönüştürüyordum ve SVN'de kabul edilmemiş değişiklikler yapmadığımdan emin olmak istedim. Ancak, .svndizinleri ve .pycderlenmiş Python dosyalarını koşullu olarak dışlamak istedim . Aşağıdaki robocopy komutu tam olarak istediğimi yapıyor:

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

Linux'ta Robocopy'ye eşdeğer var mı? rsyncKısaca baktım , ancak klasörleri senkronize etmeden önce bir rsync sunucusu kurmam gerekecek gibi görünüyordu.


1
Bir rsync sunucusu kurmanıza gerek yoktur, ssh üzerinden rsync otomatik olarak uzak makinede rsync'i sunucu modunda çalıştırır (yalnızca bu bağlantı için kullanılan, kendi hesabınız altında çalışan ve bittiğinde otomatik olarak kapanacak şekilde) .
CesarB

“… Ancak klasörleri senkronize etmeyi denemeden önce bir rsync sunucusu kurmam gerekecek gibi görünüyordu.” Yıllardır Rsync kullandım ve hiçbir zaman resmi bir Rsync sunucusu kurmam gerekmedi. Aslında, macOS'taki birçok senkronizasyon / yedekleme aracı, Carbon Copy Cloner ve — inanıyorum - SuperDuper gibi bir sunucu kurmaya gerek kalmadan çekirdek olarak Rsync'i kullanıyor.
JakeGould

Yanıtlar:


38

Görünüşe göre rsync kesinlikle peşinde olduğun şey. Dosyaları bir makineden diğerine kopyalamak için bir 'rsync sunucusu' kurmanıza gerek yoktur. Rsync, çoğu linux kutusunun önceden etkinleştirdiği (el ile devre dışı bırakılmadıysa) dosyaların SFTP (SSH Dosya Aktarımı) üzerinden kopyalanmasını destekler.

Daha fazla bilgi için rsync'li sistemlerde Lifehacker'ın Ayna dosyalarına bakın:

Verilerinizi yedeklemek, dosyaları güvenli bir şekilde dağıtmak veya çalışma belgelerinizi ofisten eve, yerel ağınızdaki bilgisayarlar arasında veya bilgisayarınızdan web sunucunuza yansıtmak isteyip istemediğinizi rsync halleder. Bugün, Mac ile PC arasındaki klasörleri komut satırında güvenli bir bağlantı üzerinden yansıtmak için rsync kullanacağız.

Rsync ücretsizdir (konuşmada olduğu gibi) ve çapraz platformdur, yani işletim sistemleri (Windows / Cygwin, Mac OS, Linux) arasında dosyaları senkronize eder; ssh üzerinde çalışır, böylece şifreli ve güvenlidir; FTP aksine bu kadar artan yüzden sadece, parçalar arasında değişmiş dosyalar, aktarılır değil bütün dosyaları bu Speedy Gonzalez gibi gitmek yapar; ve komut satırı olması komut dosyası çizilebilir ve kolayca otomatikleştirilir.


Rsync man sayfasını okuyun - ssh kullanmak için (açık bir rsync sunucusu olmadan) "-e ssh" kullanacaksınız
Doug Harris

1
RSync harika! Ve -e kullanmanıza gerek yok çünkü user@host.com: / blah / gibi herhangi bir yol otomatik olarak kullanacak.
Nasıl Yapılır Geek

Mmm, bu harika. Yani scpssh üzerinden transfer etmek için temelde benzeyen sözdizimini kullanabilir mi? Aslında bir makinede dosya aktarmaya çalışıyordum, ama bunu bilmek güzel.
Ibrahim

1
Ne yazık ki, bu cevap tamamen doğru değil: SSH kullanırken, SFTP kullanmıyor. Bunun yerine, rsync protokolünü kullanarak doğrudan rsync örneği ile iletişim kurar.
Daniel B,

15

rsync, dosyaları robocopy gibi aynı makinedeki başka bir dizine kopyalar. İşte robocopy komutunuza eşdeğer olan rsync komutu:

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

Bu, kaynağı tekrar tekrar hedefe kopyalar ve eski dosyaları ve '.svn' ve '* .pyc' dizinlerini / dosyalarını hariç tutar.


Bunun dışında tek bir dişli şekilde yapacaktır; bu, depolama çözümünüzdeki dolaylı miktarına bağlı olarak 5 kattan fazla bir performans artışıyla sonuçlanabilir.
Mikhail

Bir dosya kaynaktan silindiğinde, hedefle senkronize olmaz.
Jirong Hu
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.