Saya ingin memperbarui beberapa perangkat lunak forum dan saya ingin menguji proses peningkatan menggunakan CLI sebagai kemungkinan pembelajaran.
Bagaimana cara menggabungkan konten folder ke folder lain dan mengganti file?
Anda dapat menggunakannya rsync
untuk melakukan ini:
$ rsync -abviuzP src/ dest/
-a
mode arsip; sama dengan -rlptgoD (no -H, -A, -X)-i
mengaktifkan format terperinci, yang menampilkan lebih banyak informasi daripada format standar-b
membuat file cadangan rsync yang ada di kedua folder, menambahkan ~ ke file lama. Anda dapat mengontrol akhiran ini dengan --suffix .suf-u
membuat rsync mentransfer melewatkan file yang lebih baru di dest daripada di src-z
mengaktifkan kompresi, yang berguna saat mentransfer file yang mudah dikompresi melalui tautan lambat-P
mengaktifkan --partial dan --progress
--partial
membuat rsync menyimpan sebagian file yang ditransfer jika transfer terputus--progress
menunjukkan bilah progres untuk setiap transfer, berguna jika Anda mentransfer file besarSaya akan menjatuhkan beberapa switch ini tetapi ini hanya untuk membantu Anda memulai. Saya mungkin akan menggunakan sesuatu seperti ini:
$ rsync -abuP src/ dest/
Setelah terlihat OK, Anda dapat menjalankan perintah ini untuk menghapus file cadangan:
$ find dest/ -name "*.~" -delete
Mari kita berpura-pura memiliki data sampel berikut.
data asli
Kami akan menggunakan perintah berikut untuk membuat beberapa data palsu.
$ seq 10 | xargs -I{} -- mkdir dest/dir{}
$ for i in $(seq 5); do echo "$i" > dest/dir$i/file$i;done
Data palsu terlihat sebagai berikut:
$ 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
data baru
Sekarang kita akan mereplikasi data asli ( dest/*
-> src/
) dan menambahkan beberapa file baru ke dalam campuran. Ini mensimulasikan rilis baru.
$ cp -pr dest/* src/
$ mkdir src/dir11
$ for i in 1 3 5 11; do echo "$i$i" > src/dir$i/file$i;done
Data palsu terlihat sebagai berikut:
$ 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
gabungkan src / ke dest /
Ini meniru yang baru saja kami susun pohon perangkat lunak baru kami src/
dan ingin bergabung ke direktori kami yang sudah ada 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
Seperti yang Anda lihat, file-file berikut diperbarui, file1, file3, file5, dan dir11 + file11 yang baru ditambahkan.
Dan sebagai konfirmasi, kita dapat melihat bahwa file cadangan berikut dibuat rsync
saat menemukan file yang sudah ada di dest/
.
$ find dest/ | grep "~"
dest/dir3/file3~
dest/dir1/file1~
dest/dir5/file5~
Anda dapat menggunakan cp -r name_of_the_folder / * name_of_the_destination_folder di mana tanda bintang (*) adalah singkatan dari semua file dan -r untuk salinan rekursif.
Anda juga dapat menggunakan opsi -i yang akan menanyakan apakah Anda ingin menimpa konten.
sumber