it-swarm-tr.com

hedefte varolan dosyaları değiştirmeden scp

Hedef dizindeki içeriği değiştirmeden bir dizinin tamamını aynı ada sahip bir dizine nasıl kopyalarım? (bunun yerine, hedef klasörün içeriğine eklemek istiyorum)

169
biznez

rsync kullanın ve -u yalnızca orijinal dizinde daha yeni olan dosyaları güncellemek istiyorsanız veya --ignore-existing, hedefte zaten mevcut olan tüm dosyaları atlamak için.

rsync -au /local/directory/ Host:/remote/directory/
rsync -a --ignore-existing /local/directory/ Host:/remote/directory/

(/ kaynak tarafında: onsuz rsync/remote/directory/directory.)

scp dosyalara yazma izniniz varsa dosyaların üzerine yazar.

Başka bir deyişle: scp 'nin yazma izinlerini geçici olarak kaldırarak söz konusu dosyaları etkin bir şekilde atlayabilirsiniz (eğer dosyaların sahibi sizseniz).

88
Reimund

Tarihe göre yalnızca yeni dosyaları kopyalayabilirsiniz. find kullanın

scp  `find /data/*.gz -type f -mtime +7` [email protected]:/backup/
12
Naks

Hedef dosya içeriğini salt okunur yapabilirsiniz:

find . -type f -exec chmod a-w '{}' \;

scp 'ı çalıştırmadan önce (mevcut dosyaları şikayet edecek ve atlayacaktır).

Ve sonra tekrar değiştirin (chmod +w umask tabanlı değer elde etmek için). Dosyaların hepsinin umask'nize göre yazma izni yoksa, izinleri bir şekilde geri yükleyebilmeniz için saklamanız gerekir.

(Gilles'in cevabı, yerel olarak daha yeniyse mevcut dosyaların üzerine yazar, değerli verileri bu şekilde kaybettim. Yanlış ve zararlı cevabın neden bu kadar çok oy aldığını anlamıyorum).

10
Mohad

Bir sürü dosyayı kopyalamak için onları tarlamak daha hızlıdır. -K komutunu kullanarak, hedef sistemde paketini açarken katranın dosyaların üzerine yazmasını da engelleyebilirsiniz.

tar -c <source-dir> | ssh <name>@<Host> 'tar -kxzf - -C <target-dir>' 
7
huembi

Benzer bir görevim vardı, benim durumumda rsync, csync veya Fuse kullanamadım çünkü depolama alanımda sadece SFTP var. rsync dosyanın tarih ve saatini değiştiremedi, diğer bazı yardımcı programlar (csync gibi) bana başka hatalar gösterdi: " Geçici eğe oluşturulamadı Saat saplaması algılandı".

Depolama sunucusuna erişiminiz varsa - openssh-server veya rsync uygulamasını arka plan programı olarak başlatın.

Benim durumumda - Bunu yapamadım ve çözüm: lftp . lftp 'in senkronizasyon için kullanımı aşağıdadır:

lftp -c "open -u login,password sftp://sft.domain.tld/; \
    mirror -c --verbose=9 -e -R -L /srs/folder /rem/folder"

/src/folder - bilgisayarımdaki klasör, /rem/folder - dır-dir sftp://sft.domain.tld/rem/folder.

Bağlantıya göre adam sayfaları bulabilirsiniz: http://lftp.yar.ru/lftp-man.html

6
bolD

scp dosyaların üzerine yazıyor ve bunu durdurmak için bir anahtar yok, ancak işleri yoldan kopyalayabilir, scp yapabilir ve mevcut dosyaları geri kopyalayabilirsiniz. Örnekler:

  1. Mevcut tüm dosyaları dışarı kopyalayın

    mkdir original_files ; cp -r * original_files/
    
  2. Scp kullanarak her şeyi kopyala

    scp -r [email protected]:dir/* ./
    
  3. Orijinal dosyaları scp'nin yazdığı herhangi bir şeyin üzerine kopyalayın:

    cp -r original_files/* ./
    
0
A.Badger