Ich verwende derzeit rsync
ein Skript, das eine PHP-Anwendung von einem Staging auf einen Produktionsserver verteilt. Hier ist, wie:
rsync -rzai --progress --stats --ignore-times --checksum /tmp/app_export/ root@app.com:/var/www/html/app/
Derzeit wird eine Liste aller Dateien ausgegeben, die verglichen werden (alle Dateien im Projekt). Ich möchte jedoch, dass nur die geänderten Dateien ausgegeben werden, damit ich sie mit der --dry-run
Option ausführen kann, zu überprüfen, ob bei jeder Bereitstellung nur die Dateien aktualisiert werden gewünschte Dateien.
ANMERKUNG: Das Beste grep fcst
, was ich bisher tun konnte, sind die Ergebnisse, aber ich suche nach einer rsync
Option, von der ich sicher bin, dass sie vorhanden ist, aber ich kann sie nicht in den Manpages finden.
Danke im Voraus!
-P
denn Fortschritt macht genau das in der-n
Dryrun-Einstellung, obwohl-i
das auch nicht falsch ist. Siehe meine Antwort unten.Verwenden Sie die
--out-format
OptionNach der Manpage:
Wenn Sie nur die tatsächlichen Dateinamen (
--out-format="%n"
) benötigen, sieht Ihr Testlaufbefehl möglicherweise folgendermaßen aus:rsync -rzan --out-format="%n" --ignore-times --checksum /tmp/app_export/ [email protected]:/var/www/html/app/
Wenn rsync mit aufgerufen wird
-v
, wird diese Option intern mit dem Standardformat verwendet"%n%L"
, das nur den Namen der Datei und, wenn item the ein Link ist, den Verweis darauf angibt.Dazu gehört aber auch eine kurze Zusammenfassung zu Beginn und am Ende des Synchronisationsprozesses.
Um diese Zusammenfassung zu entfernen, verwenden Sie die
--out-format
Option direkt.Btw.
-i
auch intern verwendet--out-format
, aber mit einem Format von"%i %n%L"
.quelle
Ab rsync v3.1.0, das 2013 veröffentlicht wurde, gibt es das
--info
Flag, mit dem die Ausgabe genau gesteuert werden kann.Die verfügbaren
--info
Flags sind:quelle
Ich
-i
bin mir nicht sicher, ob dies zwischen den verwendeten Versionen / Optionen unterschiedlich ist, aber wenn ich die Option verwende, erhalte ich in der mys-Version eine Liste wie folgt:Also eine einfache Lösung, um nur eine Liste der tatsächlich übertragenen Dateien zu erhalten, einfach ausführen:
Dadurch werden einfach alle Zeilen ausgeblendet, die enthalten
f..T......
. Auf diese Weise werden identische Dateien effektiv ausgeblendet.quelle
Eigentlich hast du deine eigene Frage beantwortet, da dein ursprünglicher Befehl sie bereits hat:
--progress
Dies ist die richtige Option, obwohl die Manpage etwas kryptisch ist:
Es ist irgendwie sinnvoll, da Sie Ihre aufrufen
rsync
Zeichenfolge im Dryrun-Modus aufrufen, kein Transer stattfindet, aber Sie noch Fortschritte haben: nämlich die Dateien, die geändert wurden und übertragen werden würden.Auf diese Weise erhalten Sie eine übersichtliche kleine Liste aller Dateien, zum Beispiel:
Das Ziel hat bereits eine Kopie der geänderten Datei, die in der Quelle aktualisiert wurde, und der alten Datei, die unverändert bleibt. Die Quelle hat auch eine zusätzliche Datei: newfile.
Wenn wir dann Ihren Befehl rsync aufrufen, aber die Auflistung entfernen
-i
und einfach dryrun hinzufügen-n
Sie erhalten nur eine Liste der Dateien, die rsync übertragen würde: changedfile und newfile.
quelle