Wie kann ich ein Verzeichnis in ein anderes rekursiv kopieren und nur die Dateien ersetzen, die sich nicht verändert haben?

StackOverflow https://stackoverflow.com/questions/601247

Frage

Ich suche eine bestimmte Kopie in Fedora zu tun.

Ich habe zwei Ordner:

  • 'Webroot': Halten alle Web-Dateien / Bilder etc

  • 'Export'. Ordner Tausende von PHP, CSS, JS Dokumenten enthält, die von meinem SVN Repo exportiert werden

Das Exportverzeichnis enthält viele der gleichen Dateien / Ordner, dass die Wurzel der Fall ist, aber die Wurzel zusätzliche Einsen enthält nicht in den Export gefunden.

Ich möchte alle Inhalte des Exports mit meiner Webroot mit den folgenden Optionen fusionieren:

  1. Überschreiben Sie die Datei in Webroot wenn Export-Version enthält verschiedene Code als das, was ist innerhalb von Webroot-Version (live)
  2. Preserve die Berechtigungen / Benutzer / Gruppen der Datei, wenn sie überschrieben (die Export Version der Live-Version) * HINWEIS ersetzt ich das webroots Berechtigungen / Eigentum beibehalten möchten, aber mit dem Export der Inhalte
  3. Keine Bestätigung / Stoppen der Kopie jeglicher Art (dh nicht ausführlich)
  4. rekursive Kopie - offensichtlich I möchten alle * Dateien kopieren Ordner und Unterordner gefunden in Export

Ich habe ein wenig Forschung in cp getan - würde dies die Arbeit tun ?:

cp -pruf ./export /path/to/webroot
War es hilfreich?

Lösung

Es könnte aber jederzeit die entsprechenden Dateien in export und webroot den gleichen Inhalt, aber unterschiedliche Änderungszeiten haben, dann würden Sie einen unnötigen Kopiervorgang aufzuzuwickeln durchführen. Sie würden vermutlich etwas schlaues Verhalten von rsync bekommen:

rsync -pr ./export /path/to/webroot

Außerdem können rsync Kopieren von Dateien von einem Host zum anderen über eine SSH-Verbindung, wenn Sie überhaupt ein Bedürfnis haben, das zu tun. Außerdem ist es eine Unmenge Optionen hat man sein Verhalten angeben zu optimieren -. Aussehen in der Manpage für Details

EDIT : in Bezug auf Ihre Klarstellung über, was Sie unter Berechtigungen zu bewahren. Sie wahrscheinlich die -p Option weglassen wollen würden

Andere Tipps

  1. -u überschreibt vorhandene Dateien Ordner, wenn das Ziel älter als Quelle
  2. -p perserves die Erlaubnis und Daten
  3. -f schaltet sich aus Ausführlichkeit
  4. -r macht die Kopie rekursive

sieht so, wie Sie alle richtigen Argumente zu cp bekam

Klingt wie ein Job für cpio (und somit wahrscheinlich, GNU tar kann es auch tun):

cd export
find . -print | cpio -pvdm /path/to/webroot

Wenn Sie Besitzer erhalten müssen, haben Sie es als root zu tun, natürlich. Die -p Option ist ‚Pass-Modus‘, was bedeutet, Kopie zwischen den Standorten; -v ist die ausführliche (aber nicht interaktiv, es gibt einen Unterschied); -d bedeutet Verzeichnisse erstellen wie nötig; -m bedeutet Änderungszeit bewahren. Standardmäßig ohne die -u Option, cpio keine Dateien im Zielbereich überschreibt, die neuer sind als die, die aus dem Quellbereich.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top