it-swarm.asia

Scp dizinleri özyinelemeli olarak kopyalayabilir mi?

Şu anda yalnızca tek bir .tar dosya. Ancak dizinleri scp ile özyineli olarak nasıl kopyalayabilirim?

610
kernel

Evet, -r Kullanın:

scp -rp sourcedirectory [email protected]:/path
  • -r özyinelemeli anlamına gelir
  • -p, orijinal dosyadaki değişiklik zamanlarını, erişim zamanlarını ve modları korur.

Not: Bu, /path İçinde sourcedirectory öğesini oluşturur, böylece dosyalar /path/sourcedirectory İçinde olacaktır.

981
dmourati

Önceki yanıtlar teknik olarak doğru olsa da, bunun yerine rsync kullanmayı da düşünmelisiniz. rsync, gönderen ve alan taraflardaki verileri farklı bir mekanizma ile karşılaştırır, böylece daha önce gönderilen verileri yeniden göndermek zorunda kalmaz.

Bir şeyi bir uzak makineye bir kereden fazla kopyalayacaksanız, rsync kullanın. Aslında, her seferinde rsync kullanmak iyidir, çünkü dosya izinlerini ve sahipliğini kopyalama ve belirli dosyaları veya dizinleri hariç tutma gibi şeyler için daha fazla denetime sahiptir. Genel olarak:

$ rsync -av /local/dir/ server:/remote/dir/

yerel bir dizini uzak bir dizinle senkronize eder. İkinci kez çalıştırırsanız ve yerel dizinin içeriği değişmezse, hiçbir veri aktarılmaz - scp'yi çalıştırmak ve her seferinde her şeyi kopyalamaktan çok daha verimli.

Ayrıca, rsync, scp öğesinin aksine, kesintili aktarımlardan çok kolay bir şekilde kurtarmanıza olanak tanır.

Son olarak, rsync'ın modern sürümleri varsayılan olarak ssh üzerinde çalışır, bu nedenle scp zaten çalışıyorsa, rsync hemen hemen bir yedek değiştirme olmalıdır.

177
Phil Hollenback

Bu -r seçeneği içindir. :)

Gerekirse daha fazla bilgi için scp man sayfası konusuna bakın.

34
HedgeMage

Yinelemeli Kopyalama Seçeneği '-r' (küçük harf)

scp -r

Hangi düzenli yerel özyinelemeli kopya seçeneği '-R' ile karıştırıyorum (büyük harf)

cp -R
12
Tarun

En iyi yol SSH üzerinden rsync kullanmaktır

rsync -a -essh /source/ [email protected]:/dest/

rsync -a -essh [email protected]:/source/ /dest/

Favori seçeneklerim -Pazvessh --delete:

  • -a: arşiv modu (sembolik bağlantıları korumak da dahil olmak üzere birçok varsayılan ortak seçenek içerir)
  • -z: sıkıştır
  • -v: ayrıntılı: dosyaları göster
  • -P: progess'i yapılan dosyalar/kalan dosyalar olarak göster
  • -e ssh: ssh protokolünde rsync yap
  • --delete: hedefte artık kaynakta olmayan dosyaları siler
7
mick

Özyinelemeli kopya bayrağını aradıktan ve bu yazı sayesinde başarıyla kullandıktan sonra, sadece bir öneri göndermek istiyorum.

Durum bir dizini (yinelemeli olarak) kopyalıyor olmanız. Belki dosyalar sıkıştırılmış olarak gönderilirse aktarımda zaman kazanabilirsiniz

Sonunda ne yaptım:

local$ tar -czvf local.tar.gz directory/
local$ scp local.tar.gz [email protected]:/directory
ssh [email protected]
remote$ tar -xzvf local.tar.gz

Bu yardımcı olur umarım

4
user9869932

Bu basit komutla bir dizini tekrar tekrar sıkıştırılmış bir arşive kopyalayabilirsiniz:

ssh -p 22 [email protected]  'cd /parent/directory && tar zcvf - directory_to_copy' > /destination/on/your/machine/archive_name.tgz

Örneğin, /var/log _ domain.com ila ~/logs.tgz çalıştırıyorsunuz:

ssh -p 22 [email protected]  'cd /var && tar zcvf - log' > ~/logs.tgz

Ayrıca boruları kullanarak hedef sistemdeki dosyaları ayıklayabilirsiniz. Bu komut /var/log'de domain.com ila ~/destination/log sisteminizde:

ssh -p 22 [email protected]  'cd /var && tar zcvf - log' | tar xzf - -C ~/destination

Bir dizini yansıtmasına rağmen, muhtemelen rsync...

2
Anubioz

Kullanıcının şifresini etkileşimli olarak girmek yerine bir parametre olarak iletmeyi tercih ediyorsanız, sshpass (Sudo apt-get install -y sshpass).

Misal:

sshpass -p 'remote_password' scp -rp /src/folder [email protected]:/dest/folder
1

Herhangi bir sistemde dizinleri özyinelemeli olarak kopyalamak için scp komutuyla -r seçeneğini kullanabilirsiniz. Başka bir şeye ihtiyacınız varsa bkz. scp komut eğitimi . -r seçeneği, Linux komutlarının çoğunda özyinelemeli işlem anlamına gelir.

0
atthik