eine bestimmte Datei rekursiv synchronisieren, aber nur in den Unterverzeichnissen im Ziel

eine bestimmte Datei rekursiv synchronisieren, aber nur in den Unterverzeichnissen im Ziel

Ich habe zwei Verzeichnisse dirOrigauf dirDestverschiedenen Remote-Servern. Beide haben zahlreiche Unterverzeichnisse in unterschiedlichen Tiefen. Ich muss jetzt eine bestimmte Datei oder Erweiterung kopieren – sagen wir file1.txtrekursiv von dirOrignach dirDest. Aber ich muss die Datei nur kopieren, wenn das Unterverzeichnis bereits in vorhanden ist dirDest.

Beispielsweise kann ich mit rsync systematisch nur eine bestimmte Datei von der Quelle zum Ziel kopieren, indem ich

rsync -zarv  --prune-empty-dirs --include "*/"  --include="file1.txt" --exclude="*" "dirOrig" "dirDest"

Aber wie kann man diese Kopie nur auf die im Ziel vorhandenen Unterverzeichnisse beschränken ( dirDest)

Antwort1

Ich kenne keinen einzelnen Befehl, aber der Hack, den ich mir ausgedacht habe, ist wie folgt.

  1. Mit rsynckopieren Sie dirOrigvon server1nachserver2

    rsync -zarv --prune-empty-dirs --include "*/" \ --include="file1.txt" --exclude="*" "server1:dirOrig" \ "server2:dirOrig"

  2. Löschen Sie die Unterverzeichnisse in der kopierten Datei dirOrig, die nicht vorhanden sind, indem dirDestSiecomm

    comm -23 <( cd server2:dirOrig && find -mindepth 1 -type d | sort ) \ <( cd server2:dirDest && find -mindepth 1 -type d | sort ) \ | ( cd server2:dirOrig && xargs rm -rf )

  3. Zum Schluss rsync dirDestmit dirOrigbasierend auf der Prüfsumme und löscht alle Dateien in dirOrig, die nicht in dirDest vorhanden sind, außerfile1.txt

    rsync -acv --exclude=file1.txt --delete \ server2:dirDest server2:dirOrig

verwandte Informationen