
Ich habe zwei Verzeichnisse dirOrig
auf dirDest
verschiedenen Remote-Servern. Beide haben zahlreiche Unterverzeichnisse in unterschiedlichen Tiefen. Ich muss jetzt eine bestimmte Datei oder Erweiterung kopieren – sagen wir file1.txt
rekursiv von dirOrig
nach 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.
Mit
rsync
kopieren SiedirOrig
vonserver1
nachserver2
rsync -zarv --prune-empty-dirs --include "*/" \ --include="file1.txt" --exclude="*" "server1:dirOrig" \ "server2:dirOrig"
Löschen Sie die Unterverzeichnisse in der kopierten Datei
dirOrig
, die nicht vorhanden sind, indemdirDest
Siecomm
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 )
Zum Schluss rsync
dirDest
mitdirOrig
basierend 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