Liste der von rsync übertragenen Dateien abrufen?

14

Ich verwende derzeit rsyncein 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-runOption 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 rsyncOption, von der ich sicher bin, dass sie vorhanden ist, aber ich kann sie nicht in den Manpages finden.

Danke im Voraus!

Mauro
quelle

Antworten:

6

Wenn es eine rsync-Option gibt, mit der Sie genau das tun können, was Sie verlangen, habe ich sie auch nicht in der Manpage gefunden. :-)

Trotzdem sehe ich kein Problem darin, die Ausgabe von rsync -izu analysieren, um genau das herauszufinden, was Sie benötigen. Das fühlt sich gut an und Unixy für mich.

Ein wählerisches Problem mit Ihrem rsync-Befehl: der -rist redundant, wie es impliziert wird -a.

Kevin DeGraaf
quelle
2
Danke, Mann. Ich frage mich, warum (bei der Vielzahl der Optionen, die dieses Programm bietet) es dafür keine Option gibt. Scheint ziemlich einfach für mich.
Mauro
Hallo Kevin, eigentlich gibt es eine Option: -Pdenn Fortschritt macht genau das in der -nDryrun-Einstellung, obwohl -idas auch nicht falsch ist. Siehe meine Antwort unten.
Robert Riedl
6

Verwenden Sie die --out-formatOption

Nach der Manpage:

Wenn Sie diese --out-formatOption angeben, werden alle Dateien, Verzeichnisse usw. aufgeführt, die in erheblichem Umfang aktualisiert werden (übertragene Dateien, neu erstellte Symlinks / Geräte oder Verzeichnisse).

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-formatOption direkt.

Btw. -iauch intern verwendet --out-format, aber mit einem Format von "%i %n%L".

Grippe
quelle
3

Ab rsync v3.1.0, das 2013 veröffentlicht wurde, gibt es das --infoFlag, mit dem die Ausgabe genau gesteuert werden kann.

 --info=FLAGS
          This option lets you have fine-grained control over the information output you want to see.  An individual flag name may be followed
          by a level number, with 0 meaning to silence that output, 1 being the default output level, and higher numbers increasing the output
          of that flag (for those that support higher levels).  Use --info=help to see all the available flag names,  what  they  output,  and
          what flag names are added for each increase in the verbose level.  Some examples:

              rsync -a --info=progress2 src/ dest/
              rsync -avv --info=stats2,misc1,flist0 src/ dest/

          Note  that  --info=names  output  is  affected  by the --out-format and --itemize-changes (-i) options.  See those options for more
          information on what is output and when.

          This option was added to 3.1.0, so an older rsync on the server side might reject your attempts at fine-grained control (if  one  or
          more  flags  needed  to  be  send to the server and the server was too old to understand them).  See also the "max verbosity" caveat
          above when dealing with a daemon.

Die verfügbaren --infoFlags sind:

Use OPT or OPT1 for level 1 output, OPT2 for level 2, etc.; OPT0 silences.

BACKUP     Mention files backed up
COPY       Mention files copied locally on the receiving side
DEL        Mention deletions on the receiving side
FLIST      Mention file-list receiving/sending (levels 1-2)
MISC       Mention miscellaneous information (levels 1-2)
MOUNT      Mention mounts that were found or skipped
NAME       Mention 1) updated file/dir names, 2) unchanged names
PROGRESS   Mention 1) per-file progress or 2) total transfer progress
REMOVE     Mention files removed on the sending side
SKIP       Mention files that are skipped due to options used
STATS      Mention statistics at end of run (levels 1-3)
SYMSAFE    Mention symlinks that are unsafe

ALL        Set all --info options (e.g. all4)
NONE       Silence all --info options (same as all0)
HELP       Output this help message

Options added for each increase in verbose level:
1) COPY,DEL,FLIST,MISC,NAME,STATS,SYMSAFE
2) BACKUP,MISC2,MOUNT,NAME2,REMOVE,SKIP
Corneliu
quelle
1
Das ist großartig, danke. Ich hatte keine Ahnung, dass dieses Flag existiert, weil ich einen Mac verwende - selbst das neueste MacOS installiert eine rsync-Version von 2004 lol. Prost Apfel ...
twistedpixel
0

Ich -ibin 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:

>f..T...... existing-file.png
>f+++++++++ new-file.png
cd+++++++++ new-dir/
>f+++++++++ new-dir/new-file.png

Also eine einfache Lösung, um nur eine Liste der tatsächlich übertragenen Dateien zu erhalten, einfach ausführen:

rsync [your options here] | grep -v "f..T......"

Dadurch werden einfach alle Zeilen ausgeblendet, die enthalten f..T....... Auf diese Weise werden identische Dateien effektiv ausgeblendet.

Nux
quelle
0

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:

     --progress              show progress during transfer
 -P                          same as --partial --progress

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.

#~$ ls -lhan /tmp/destination/
total 20K
drwxrwxr-x  2 1000 1000 4,0K Jän 31 09:07 .
drwxrwxrwt 18    0    0  12K Jän 31 09:15 ..
-rw-rw-r--  1 1000 1000    2 Jän 31 09:08 changedfile
-rw-rw-r--  1 1000 1000    0 Jän 31 09:07 oldfile



#~$ ls -lhan /tmp/source/
total 20K
drwxrwxr-x  2 1000 1000 4,0K Jän 31 09:07 .
drwxrwxrwt 18    0    0  12K Jän 31 09:15 ..
-rw-rw-r--  1 1000 1000    2 Jän 31 09:15 changedfile
-rw-rw-r--  1 1000 1000    0 Jän 31 09:07 newfile
-rw-rw-r--  1 1000 1000    0 Jän 31 09:07 oldfile

Wenn wir dann Ihren Befehl rsync aufrufen, aber die Auflistung entfernen -iund einfach dryrun hinzufügen-n

#~$ ~$ rsync -n -rza --progress --stats --ignore-times --checksum /tmp/source/ /tmp/destination/
sending incremental file list
changedfile
newfile

Number of files: 4 (reg: 3, dir: 1)
Number of created files: 1 (reg: 1)
Number of deleted files: 0
Number of regular files transferred: 2
Total file size: 2 bytes
Total transferred file size: 2 bytes
Literal data: 0 bytes
Matched data: 0 bytes
File list size: 0
File list generation time: 0.001 seconds
File list transfer time: 0.000 seconds
Total bytes sent: 187
Total bytes received: 22

sent 187 bytes  received 22 bytes  418.00 bytes/sec
total size is 2  speedup is 0.01 (DRY RUN)

Sie erhalten nur eine Liste der Dateien, die rsync übertragen würde: changedfile und newfile.

Robert Riedl
quelle