Linux gleichbedeutend mit Robocopy?

34

Es ist lustig, es gibt viele Möglichkeiten, wie Linux-Befehlszeilentools den Windows-Tools weit überlegen sind, aber eine Sache, für die ich kein Äquivalent gefunden habe, ist Robocopy . Robocopy ist viel vielseitiger als cp, und ich kann nicht herausfinden, wie ich mit Linux-Tools machen soll, was ich will.

Ein spezieller Anwendungsfall ist, dass ich zwei Verzeichnisse mit zumeist ähnlichen Dateien habe, aber eines neuere Quelldateien und eines Inhaltsdateien, die das andere Verzeichnis nicht hat, und möglicherweise neuere Quelldateien (für eine Website). Ich möchte die Dateien aus dem letzteren Verzeichnis in das erstere kopieren, neue Inhaltsdateien und dergleichen hinzufügen, aber neuere Dateien im Zielverzeichnis nicht überschreiben.

Ich habe versucht, eine halbe Stunde lang herauszufinden, wie das unter Linux geht, und dann festgestellt, dass ich wahrscheinlich Bash-Skripte lernen oder etwas tun muss, was ich wollte. Ich hatte auch einige andere Anforderungen. Ich habe im Grunde genommen eine Python (Django) -Website von einem SVN-Repository in ein Git-Repository konvertiert und wollte sicherstellen, dass keine nicht festgeschriebenen Änderungen in SVN vorgenommen wurden. Ich wollte jedoch die .svnVerzeichnisse und die .pyckompilierten Python-Dateien bedingt ausschließen . Der folgende Robocopy-Befehl macht genau das, was ich will:

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

Gibt es eine Entsprechung zu Robocopy unter Linux? Ich habe rsynckurz nachgeschaut , aber es schien, als müsste ich einen Rsync-Server einrichten, bevor ich versuche, die Ordner zu synchronisieren.

Ibrahim
quelle
1
Sie müssen keinen rsync-Server einrichten, rsync over ssh führt rsync auf dem Remote-Computer automatisch im Servermodus aus (auf eine Weise, die nur für diese Verbindung verwendet wird, unter Ihrem eigenen Konto ausgeführt wird und automatisch geschlossen wird, wenn dies abgeschlossen ist). .
CesarB
"... aber es schien, als müsste ich einen Rsync-Server einrichten, bevor ich versuche, die Ordner zu synchronisieren." Ich benutze Rsync seit Jahren und musste nie einen formalen Rsync-Server einrichten. Tatsächlich verwenden viele Synchronisierungs- / Sicherungstools unter macOS Rsync als Kern, ohne dass ein Server wie Carbon Copy Cloner und - wie ich glaube - SuperDuper eingerichtet werden muss!
JakeGould

Antworten:

38

Es klingt so, als ob Rsync definitiv das ist, wonach Sie suchen. Sie müssen keinen 'rsync-Server' einrichten, um Dateien von einem Computer auf einen anderen zu kopieren. Rsync unterstützt das Kopieren von Dateien über SFTP (SSH File Transfer), das die meisten Linux-Boxen bereits aktiviert haben (wenn nicht manuell deaktiviert).

Weitere Informationen finden Sie unter Lifehackers Mirror-Dateien systemübergreifend mit rsync :

Unabhängig davon, ob Sie Ihre Daten sichern, Dateien sicher verteilen oder Ihre Arbeitsdokumente über das Internet von Ihrem Büro zu Hause, zwischen Computern in Ihrem lokalen Netzwerk oder von Ihrem Computer zu Ihrem Webserver spiegeln möchten, rsync kann die Arbeit erledigen. Heute verwenden wir rsync, um Ordner zwischen einem Mac und einem PC über eine sichere Verbindung an der Befehlszeile zu spiegeln.

Rsync ist kostenlos (wie in Sprache) und plattformübergreifend, dh es synchronisiert Dateien zwischen Betriebssystemen (Windows / Cygwin, Mac OS, Linux). Es funktioniert über ssh, ist also verschlüsselt und sicher. Im Gegensatz zu FTP ist es inkrementell , so dass nur die Teile der geänderten Dateien übertragen werden, nicht ganze Dateien , was es zu Speedy Gonzalez werden lässt. und die Tatsache, dass es eine Befehlszeile ist, macht es skriptfähig und einfach zu automatisieren.

Josh Hunt
quelle
Lesen Sie die rsync-Manpage - um ssh (ohne expliziten rsync-Server) zu verwenden, verwenden Sie "-e ssh"
Doug Harris
1
rsync ist großartig! Und Sie müssen -e nicht verwenden, da ein Pfad wie [email protected]: / blah / ihn automatisch verwendet.
The How-To Geek
Mmm, das ist cool. Kann es also grundsätzlich eine scpähnliche Syntax für die Übertragung über ssh verwenden? Eigentlich habe ich versucht, Dateien auf einen Computer zu übertragen, aber das ist gut zu wissen.
Ibrahim,
1
Leider ist diese Antwort nicht ganz richtig: Obwohl SSH verwendet wird, wird SFTP nicht verwendet. Stattdessen kommuniziert es direkt über das rsync-Protokoll mit der entfernten rsync-Instanz.
Daniel B
15

rsync kopiert Dateien von einem Verzeichnis in ein anderes Verzeichnis auf demselben Computer wie robocopy. Hier ist der Befehl rsync, der Ihrem Befehl robocopy entspricht:

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

Dadurch wird die Quelle rekursiv in das Ziel kopiert und ältere Dateien sowie die Verzeichnisse / Dateien '.svn' und '* .pyc' ausgeschlossen.

Sean Staats
quelle
Dies geschieht jedoch auf eine Art und Weise mit einem einzigen Thread, was je nach Umfang der Indirektion in Ihrer Speicherlösung zu einer mehr als fünffachen Leistungseinbuße führen kann.
Mikhail
Wenn eine Datei von der Quelle gelöscht wird, wird sie nicht mit dem Ziel synchronisiert.
Jirong Hu