Yanıtlar:
Evet, kullan -r
:
scp -rp sourcedirectory user@dest:/path
Not: Bu, sourcedirectory
içeriyi oluşturur, /path
böylece dosyalar içeride olur./path/sourcedirectory
-pr
(ters sırada olan seçenekler) klasörleri kopyalamayacaktır, içeriğini hedef dizine (görünüşte, seçeneklerin sırası önemlidir) kopyalayın.
Önceki cevaplar teknik olarak doğru olsa da rsync
bunun yerine kullanmayı düşünmelisiniz . rsync
Gönderme ve alma taraflarındaki verileri farklı bir mekanizma ile karşılaştırır, böylece daha önce gönderilen verileri tekrar göndermesi gerekmez.
Bir şeyi bir uzak makineye bir kereden fazla kopyalayacaksanız kullanın rsync
. Aslında, rsync
her zaman kullanmak iyidir, çünkü dosya izinlerini ve sahipliğini kopyalamak ve belirli dosyaları veya dizinleri hariç tutmak gibi şeyler için daha fazla denetime sahiptir. Genel olarak:
$ rsync -av /local/dir/ server:/remote/dir/
Yerel bir dizini uzak bir dizin ile senkronize eder. İkinci kez çalıştırırsanız ve yerel dizinin içeriği değişmediyse, hiçbir veri aktarılmaz - scp
her seferinde her şeyi çalıştırıp kopyalamaktan çok daha etkilidir .
Ayrıca, rsync
kesintili transferlerden farklı olarak çok kolay bir şekilde kurtarmanıza olanak sağlar scp
.
Son olarak, rsync
varsayılan olarak ssh üzerinden çalışan modern sürümler scp
, zaten çalışıyorsa, rsync
hemen hemen bir drop-in yerine geçmelidir.
rsync
daha verimlidir. Şu anda yapmadığı bir şey scp
, uzak ana bilgisayarlar arasında kopyalamaya izin vermektir (en azından rsync istemcisini bunlardan birinde çalıştırmadan).
-av
: v, ayrıntılı bir arşiv, bir arşiv ve özyinelemeli, hak sahibi tarihlerini ve bağlantılarını koruyan -rlptgoD kısayolu. Sadece özyinelemeli kullanımı istiyorsanız-r
Bu -r
seçenek bunun için var. :)
Gerekirse daha fazla bilgi için scp man sayfasına bakın .
Özyinelemeli Kopyalama Seçeneği '-r' (küçük harf)
scp -r
Düzenli yerel özyinelemeli kopya seçenek '-R' ile karıştırıyorum (büyük harf)
cp -R
En iyi yol, SSH üzerinden rsync kullanmaktır
rsync -a -essh /source/ user@dest-server:/dest/
rsync -a -essh user@source-server:/source/ /dest/
Favori seçeneklerim -Pazvessh --delete:
rsync
Kullandığım tüm sürümleri ssh
varsayılan olarak kullanır , bu nedenle -essh
gerekli olması olası değildir. Uzaktaki ana bilgisayara bağlanmak için kullanılan komut seçimi, tekrarlı bir şekilde kopyalamakla gerçekten ilgilidir.
Özyinelemeli kopya bayrağı aradıktan ve bu yazı sayesinde başarıyla kullandıktan sonra, sadece bir öneri göndermek istiyorum.
Durum buysa, bir dizini (tekrarlı olarak) kopyalıyorsanız. Belki de dosyalar sıkıştırılmış olarak gönderilirse transferde zaman kazanabilirsiniz.
Sonunda yaptığım şey:
local$ tar -czvf local.tar.gz directory/
local$ scp local.tar.gz user@remote:/directory
ssh user@remote
remote$ tar -xzvf local.tar.gz
Bu yardımcı olur umarım
.tar.gz
da dosya olmalıdır, .tgz
çünkü dosya gzipped tar arşividir ( -z
bayrak kullanıldığından beri ).
Bu basit komut ile bir dizini tekrar tekrar sıkıştırılmış bir arşive kopyalayabilirsiniz:
ssh -p 22 user@address-to-copy-from.com 'cd /parent/directory && tar zcvf - directory_to_copy' > /destination/on/your/machine/archive_name.tgz
Örneğin, içeriğini kopyalamak için /var/log
gelen domain.com
için ~/logs.tgz
çalıştırmak:
ssh -p 22 user@domain.com 'cd /var && tar zcvf - log' > ~/logs.tgz
Borular kullanarak hedef sistemdeki dosyaları da çıkarabilirsiniz. Bu komut içeriğini kopyalar /var/log
de domain.com
hiç ~/destination/log
sisteminizde:
ssh -p 22 user@domain.com 'cd /var && tar zcvf - log' | tar xzf - -C ~/destination
Bir dizini yansıtmakla birlikte, muhtemelen kullanmalısın rsync
...
Kullanıcının şifresini etkileşimli olarak girmek yerine bir parametre olarak iletmeyi tercih ederseniz, sshpass
( sudo apt-get install -y sshpass
) kullanabilirsiniz .
Örnek:
sshpass -p 'remote_password' scp -rp /src/folder myremoteusername@122.10.12.123:/dest/folder
Herhangi bir sistemde dizinleri art arda kopyalamak için -r seçeneğini scp komutuyla kullanabilirsiniz. Başka bir şeye ihtiyacınız olursa, scp komutu eğitimine bakın . -r seçeneği Linux komutlarının çoğunda özyinelemeli işlem anlamına gelir.
-r
seçenek yıllar önce önerilmiş ve kabul edilen cevap.
Başka bir (muhtemelen tekrarlanan kullanım için daha iyi) seçeneği, NFS kullanmaktır - nfs-kernel-server'a bakın ve NFS paylaşımlarının nasıl kurulduğunu kontrol edin.
scp
ama NFS bir seçenek değil.