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.
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.
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.
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 vonsource
vorhandene Dateien indestination
ersetzen. Siehe https://superuser.com/a/341296. - Die Option
-a
, auch bekannt als "Archiv", kopiert rekursiv verzeichnisse innerhalb vonsource
unter Beibehaltung von Zeitstempeln und Berechtigungen usw. - Die Option
-T
stellt sicher, dass wir den Inhalt vonsource
indirectory
und nicht in das Verzeichnissource
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.
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