Je veux mettre à jour certains logiciels de forum et je voudrais tester le process de mise à niveau en utilisant l'interface CLI comme une possibilité d'apprentissage.
Comment merge le contenu d'un dossier dans un autre dossier et replace des files?
Vous pouvez utiliser rsync
pour faire ceci:
$ rsync -abviuzP src/ dest/
-a
mode d'archive; est égal à -rlptgoD (non -H, -A, -X) -i
active le format détaillé, qui affiche plus d'informations que le format par défaut -b
crée des files de sauvegarde rsync qui existent dans les deux dossiers, en ajoutant ~ à l'ancien file. Vous pouvez contrôler ce suffixe avec –suffix .suf -u
fait rsync transférer les files qui sont plus récents dans dest que dans src -z
active la compression, ce qui est utile lors du transfert de files facilement compressibles sur des bindings lentes -P
s'allume –partial et –progress
--partial
permet à rsync de conserver partiellement les files transférés si le transfert est interrompu --progress
affiche une barre de progression pour chaque transfert, utile si vous transférez de gros files Je laisse tomber plusieurs de ces commutateurs, mais c'est juste pour vous aider à démarrer. J'utiliserais probablement quelque chose comme ça:
$ rsync -abuP src/ dest/
Une fois que cela semble correct, vous pouvez exécuter cette command pour supprimer les files de sauvegarde:
$ find dest/ -name "*.~" -delete
Supposons que nous avons datatables d'exemple suivantes.
données originales
Nous utiliserons les commands suivantes pour fabriquer de fausses données.
$ seq 10 | xargs -I{} -- mkdir dest/dir{} $ for i in $(seq 5); do echo "$i" > dest/dir$i/file$i;done
Les fausses données sont les suivantes:
$ 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
nouveldatatables
Nous allons maintenant répliquer datatables d'origine ( dest/*
-> src/
) et append quelques nouveaux files au mixage. Cela simule une "nouvelle 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
Les fausses données sont les suivantes:
$ 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
merge src / dans dest /
Cela simule que nous venons d'installer notre nouvel tree logiciel dans src/
et que nous voulons merge dans notre directory préexistant, 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
Comme vous pouvez le voir, les files suivants ont été mis à jour: file1, file3, file5 et le file dir11 + ajouté11.
Et comme confirmation, nous pouvons voir que les files de sauvegarde suivants ont été créés par rsync
lorsqu'il a rencontré les files préexistants dans dest/
.
$ find dest/ | grep "~" dest/dir3/file3~ dest/dir1/file1~ dest/dir5/file5~
Vous pouvez utiliser cp -r name_of_the_folder / * name_of_the_destination_folder où l'astérisque (*) représente tous les files et -r pour la copy récursive.
Vous pouvez également utiliser l'option -i qui vous requestra si vous voulez écraser le contenu.