Linux entspricht Robocopy?

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

Ein spezifischer Anwendungsfall ist, dass ich zwei Verzeichnisse mit meist ähnlichen Dateien habe, eines jedoch neuere Quelldateien und eines mit Inhaltsdateien, die das andere Verzeichnis nicht hat haben, 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 keine neueren Dateien im Zielverzeichnis überschreiben.

Ich versuchte vielleicht eine halbe Stunde lang herauszufinden, wie man das unter Linux macht, entschied, dass ich wahrscheinlich Bash-Skripte oder etwas lernen müsste, um das zu tun, was ich wollte, und dann wurde mir klar, dass ich Robocopy einfach benutzen könnte. Ich hatte auch einige andere Anforderungen. Ich war im Grunde konvertieren einer Python (Django) - Website von einem SVN-Repository in ein Git-Repository, und ich wollte sicherstellen, dass ich keine nicht festgeschriebenen Änderungen in SVN hatte. Ich wollte jedoch die Verzeichnisse .svn und die kompilierten Python-Dateien .pyc bedingt ausschließen. Der folgende robocopy Befehl macht genau das, was ich will:

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

Gibt es ein Äquivalent zu Robocopy in Linux? Ich habe mich kurz mit rsync befasst, aber es schien, als müsste ich einen rsync-Server einrichten, bevor ich versuche, die Ordner.

Author: Giacomo1968, 2009-08-25

3 answers

Es klingt wie rsync ist definitiv das, 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), die die meisten Linux-Boxen bereits aktiviert haben (wenn nicht manuell deaktiviert).

Lifehacker Sehen ist - Spiegel-Dateien zwischen Systemen mit rsync - für weitere details:

Ob Sie Ihre Daten sichern, Dateien sicher verteilen oder Ihre Arbeitsdokumente über die internet vom Büro zu Hause, zwischen Computern in Ihrem lokalen Netzwerk oder von Ihrem Computer zu Ihrem Webserver kann rsync die Arbeit erledigen. Heute verwenden wir rsync, um Ordner zwischen einem Mac und einem PC über eine sichere Verbindung über die Befehlszeile zu spiegeln.

Rsync ist frei (wie in Speech) und plattformübergreifend, dh es synchronisiert Dateien zwischen Betriebssystemen (Windows/Cygwin, Mac OS, Linux); es funktioniert über ssh, so dass es verschlüsselt und sicher ist; Im Gegensatz zu FTP ist es inkrementell, also nur die teilen von geändert Dateien übertragen, nicht ganze Dateien,, die es macht, gehen Sie wie Speedy Gonzalez; und die Tatsache, dass es die command-Zeile lässt es skriptfähig und einfach automatisiert.

 41
Author: Josh Hunt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2020-06-12 13:48:39

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

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

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

 17
Author: Sean Staats,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2009-08-25 14:04:32

Wenn Sie leben können, ohne die Verzeichnisse .svn und die Dateien .pyc auszuschließen, und wenn keiner Ihrer Datei - und Verzeichnisnamen Leerzeichen enthält, können Sie einfach cp an der GNU/Linux-Eingabeaufforderung verwenden:

cp -uaT source destination

Wobei source und destination Verzeichnisse sind.

  • Die Option -u stellt sicher, dass nur neuere Versionen von source vorhandene Dateien in destination ersetzen. Siehe https://superuser.com/a/341296.
  • Die Option -a, auch bekannt als "Archiv", kopiert rekursiv verzeichnisse innerhalb von source unter Beibehaltung von Zeitstempeln und Berechtigungen usw.
  • Die Option -T stellt sicher, dass wir den Inhalt von source in directory und nicht in das Verzeichnis source selbst kopieren.

Es ist wichtig, dass die GNU-Version von cp verwendet wird, da einige dieser Optionen in anderen UNIX-Versionen, z. B. macOS, unterschiedlich oder nicht verfügbar sind.

Wenn Sie Leerzeichen in Ihren Datei-oder Verzeichnisnamen haben, können Sie rsync wie andere erwähnt haben, oder pipe find mit -print0 bis xargs mit -0, was Sie untersuchen können, aber außerhalb des Rahmens dieser Antwort liegt. Beide Möglichkeiten lassen sich ausschließen.

 1
Author: Dr. Jonas August,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2020-03-10 20:09:18