CLI kullanarak klasörleri birleştirin ve dosyaları değiştirin


9

Bazı forum yazılımlarını güncellemek istiyorum ve yükseltme işlemini CLI kullanarak bir öğrenme olasılığı olarak test etmek istiyorum.

Bir klasörün içeriğini başka bir klasörle nasıl birleştiririm ve dosyaları nasıl değiştiririm?

Yanıtlar:


10

Bunu rsyncyapmak için kullanabilirsiniz :

$ rsync -abviuzP src/ dest/
  • -aarş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
  • -bher 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ı olur

Bu 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

Misal

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~

Yukarıdaki noktayı açıklığa kavuşturmak için: Tamam göründüğünde, yedek dosyaları kaldırmak için bu komutu çalıştırabilirsiniz:> $ find dest / -name "start dot ~" -delete Bu benim için işe yaramadı, oysa:> $ bulmak dest / -name "başlangıç ​​nokta yıldızı ~" -delete yaptı. Bunun bir yazım hatası olup olmadığından emin değilim!

2

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.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.