Wie kann ich ein Verzeichnis in ein anderes rekursiv kopieren und nur die Dateien ersetzen, die sich nicht verändert haben?
-
03-07-2019 - |
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:
- Überschreiben Sie die Datei in Webroot wenn Export-Version enthält verschiedene Code als das, was ist innerhalb von Webroot-Version (live)
- 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
- Keine Bestätigung / Stoppen der Kopie jeglicher Art (dh nicht ausführlich)
- 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
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
- -u überschreibt vorhandene Dateien Ordner, wenn das Ziel älter als Quelle
- -p perserves die Erlaubnis und Daten
- -f schaltet sich aus Ausführlichkeit
- -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.