Ich möchte eine Forum-Software aktualisieren und möchte den Upgrade-Prozess mit CLI als Lernmöglichkeit testen.
Wie füge ich den Inhalt eines Ordners in einen anderen Ordner ein und ersetze Dateien?
Sie können dies verwenden rsync
, um dies zu tun:
$ rsync -abviuzP src/ dest/
-a
Archivierungsmodus; gleich -rlptgoD (kein -H, -A, -X)-i
Aktiviert das Einzelformat, das mehr Informationen als das Standardformat anzeigt-b
Erstellt rsync-Sicherungsdateien, die in beiden Ordnern vorhanden sind, und hängt ~ an die alte Datei an. Sie können dieses Suffix mit --suffix .suf steuern-u
Durch rsync-Übertragung werden Dateien übersprungen, die in dest neuer sind als in src-z
Aktiviert die Komprimierung, was nützlich ist, wenn leicht komprimierbare Dateien über langsame Links übertragen werden-P
schaltet --partial und --progress ein
--partial
bewirkt, dass rsync teilweise übertragene Dateien behält, wenn die Übertragung unterbrochen wird--progress
Zeigt für jede Übertragung einen Fortschrittsbalken an, der nützlich ist, wenn Sie große Dateien übertragenIch würde mehrere dieser Schalter fallen lassen, aber dies ist nur, um Ihnen den Einstieg zu erleichtern. Ich würde wahrscheinlich so etwas verwenden:
$ rsync -abuP src/ dest/
Sobald es in Ordnung aussieht, können Sie diesen Befehl ausführen, um die Sicherungsdateien zu entfernen:
$ find dest/ -name "*.~" -delete
Stellen wir uns vor, wir hätten die folgenden Beispieldaten.
Originale Daten
Wir werden die folgenden Befehle verwenden, um einige gefälschte Daten herzustellen.
$ seq 10 | xargs -I{} -- mkdir dest/dir{}
$ for i in $(seq 5); do echo "$i" > dest/dir$i/file$i;done
Gefälschte Daten sehen wie folgt aus:
$ tree -DsifvF --noreport dest/
dest
[ 4096 Aug 29 22:21] dest/dir1/
[ 2 Aug 29 22:21] dest/dir1/file1
[ 4096 Aug 29 22:21] dest/dir2/
[ 2 Aug 29 22:21] dest/dir2/file2
[ 4096 Aug 29 22:21] dest/dir3/
[ 2 Aug 29 22:21] dest/dir3/file3
[ 4096 Aug 29 22:21] dest/dir4/
[ 2 Aug 29 22:21] dest/dir4/file4
[ 4096 Aug 29 22:21] dest/dir5/
[ 2 Aug 29 22:21] dest/dir5/file5
neue Daten
Jetzt replizieren wir die Originaldaten ( dest/*
-> src/
) und fügen dem Mix einige neuere Dateien hinzu. Dies simuliert eine "neue Version".
$ cp -pr dest/* src/
$ mkdir src/dir11
$ for i in 1 3 5 11; do echo "$i$i" > src/dir$i/file$i;done
Gefälschte Daten sehen wie folgt aus:
$ tree -DsifvF --noreport src/
src
[ 4096 Aug 29 22:21] src/dir1/
[ 3 Aug 29 23:00] src/dir1/file1
[ 4096 Aug 29 22:21] src/dir2/
[ 2 Aug 29 22:21] src/dir2/file2
[ 4096 Aug 29 22:21] src/dir3/
[ 3 Aug 29 23:00] src/dir3/file3
[ 4096 Aug 29 22:21] src/dir4/
[ 2 Aug 29 22:21] src/dir4/file4
[ 4096 Aug 29 22:21] src/dir5/
[ 3 Aug 29 23:00] src/dir5/file5
[ 4096 Aug 29 23:00] src/dir11/
[ 5 Aug 29 23:00] src/dir11/file11
füge src / in dest / zusammen
Dies ahmt nach, dass wir gerade unseren neuen Softwarebaum eingerichtet haben src/
und in unser bereits vorhandenes Verzeichnis einbinden möchten dest/
.
$ rsync -abuP src/ dest/
sending incremental file list
dir1/file1
3 100% 0.00kB/s 0:00:00 (xfer#1, to-check=5/13)
dir11/
dir11/file11
5 100% 4.88kB/s 0:00:00 (xfer#2, to-check=4/13)
dir3/file3
3 100% 2.93kB/s 0:00:00 (xfer#3, to-check=2/13)
dir5/file5
3 100% 2.93kB/s 0:00:00 (xfer#4, to-check=0/13)
sent 416 bytes received 97 bytes 1026.00 bytes/sec
total size is 18 speedup is 0.04
Wie Sie sehen können, wurden die folgenden Dateien aktualisiert: Datei1, Datei3, Datei5 und die neu hinzugefügte Datei dir11 + file11.
Und als Bestätigung können wir sehen, dass die folgenden Sicherungsdateien erstellt wurden, rsync
als sie auf die bereits vorhandenen Dateien in stießen dest/
.
$ find dest/ | grep "~"
dest/dir3/file3~
dest/dir1/file1~
dest/dir5/file5~
Sie können cp -r name_of_the_folder / * name_of_the_destination_folder verwenden, wobei das Sternchen (*) für alle Dateien und -r für rekursive Kopien steht.
Sie können auch die Option -i verwenden, mit der Sie gefragt werden, ob Sie den Inhalt überschreiben möchten.
quelle