Yanıtlar:
Bunu rsync
yapmak için kullanabilirsiniz :
$ rsync -abviuzP src/ dest/
-a
arşiv modu; -rlptgoD'ye eşittir (-H, -A, -X yok)-i
varsayılan biçimden daha fazla bilgi gösteren ayrıntılı biçimi açar-b
her iki klasörde de bulunan rsync yedekleme dosyalarını eski dosyaya ~ ekler. Bu soneki --suffix .suf ile kontrol edebilirsiniz.-u
rsync transferini destc içinde src'den daha yeni olan dosyaları atla-z
sıkıştırmayı açar, bu da kolayca sıkıştırılabilir dosyaları yavaş bağlantılar üzerinden aktarırken faydalıdır-P
- kısmi ve - ilerleme durumunu açar
--partial
aktarım kesilirse rsync'in kısmen aktarılmış dosyaları tutmasını sağlar--progress
her aktarım için bir ilerleme çubuğu gösterir, büyük dosyaları aktarırsanız yararlı olurBu anahtarlardan birkaçını düşürürdüm ama bu sadece başlamanız için. Muhtemelen böyle bir şey kullanırdım:
$ rsync -abuP src/ dest/
Tamam göründüğünde, yedekleme dosyalarını kaldırmak için bu komutu çalıştırabilirsiniz:
$ find dest/ -name "*.~" -delete
Aşağıdaki örnek verilere sahip olduğumuzu varsayalım.
Orjinal veri
Bazı sahte verileri üretmek için aşağıdaki komutları kullanacağız.
$ seq 10 | xargs -I{} -- mkdir dest/dir{}
$ for i in $(seq 5); do echo "$i" > dest/dir$i/file$i;done
Sahte veriler aşağıdaki gibi görünür:
$ 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
yeni veri
Şimdi orijinal verileri çoğaltacağız ( dest/*
-> src/
) ve karışıma birkaç yeni dosya ekleyeceğiz. Bu "yeni bir sürümü taklit eder.
$ cp -pr dest/* src/
$ mkdir src/dir11
$ for i in 1 3 5 11; do echo "$i$i" > src/dir$i/file$i;done
Sahte veriler aşağıdaki gibi görünür:
$ 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
src / dest / içine birleştir
Bu, yeni yazılım ağacımızı oluşturduğumuzu src/
ve önceden var olan dizinimizle birleştirmek istediğimizi taklit ediyor 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
Gördüğünüz gibi aşağıdaki dosyalar güncellendi, dosya1, dosya3, dosya5 ve yeni eklenen dir11 + dosya11.
Ve onay olarak, aşağıdaki yedek dosyaların rsync
önceden var olan dosyalarla karşılaştığında göre oluşturulduğunu görebiliriz dest/
.
$ find dest/ | grep "~"
dest/dir3/file3~
dest/dir1/file1~
dest/dir5/file5~
Yıldız işaretinin (*) tüm dosyaları temsil ettiği cp -r name_of_the_folder / * name_of_the_destination_folder komutunu ve özyineli kopya için -r kullanabilirsiniz.
Ayrıca, içeriğin üzerine yazmak isteyip istemediğinizi soracak -i seçeneğini de kullanabilirsiniz.