Yanıtlar:
sftp
gibi cp
ve scp
, bir klasörü kopyaladığınızda (ve içeriği açık bir şekilde), klasöre tekrarlı olarak -r
seçenekle aktarmayı istediğinizi açıkça söylemeniz gerektiğini belirtir .
Yani, -r
komuta ekleyin .
-r
için sftp
bağlanmakta olduğunuz zaman komuta. sftp -r user@host
Couldn't canonicalise: No such file or directory
.
# sftp user@remote-host
#> get -r remote-folder
Sadece önerebilirim, kullanmanı rsync
. Dosyaları güvenli bağlantılar üzerinden taşırken bir endüstri standardıdır.
rsync -alPvz ./source_dir server.com:destination_dir
Şimdilik yıllardır kullandığım şey bu.
( -a
seçenek, dizin özyinelemesi gibi şeylerle ilgilenir)
-a
= özyineleme + sembolik bağlar, izinler, değişiklik zamanları, sahip, grup, özel dosyalar ve cihaz dosyalarını sakla (ikincisi süper kullanıcı ayrıcalıkları gerektirir); -l
= sembolik bağları koru (zaten dahil -a
); -P
= transfer sırasındaki ilerlemeyi göster + kısmen transfer edilmiş dosyaları sakla; -v
= ayrıntılı mod (ancak -P
garip (hata?) bir protocol version mismatch
hatadan kaçınmak için kullanırken zorunlu görünmektedir ); -z
= aktarılan verilerin sıkıştırılmasını etkinleştir.
-l
anahtarın kullanılması gerekip gerekmediğine bağlı olarak versiyona bağlı gibi görünüyor . Ben eski sürümler içermiyordu hatırlıyorum -l
içinde -a
.
Ayrıca kullanımı da kullanabilirsiniz scp
. Genel format
scp -rp sourceDirName username@server:destDirName
scp
"güvenli kopya" anlamına gelir. Bayraklar
-r
alt dizinlere yineleme-p
değişiklik zamanlarını koruDiğer öğelerin kendi kendini açıklayıcı olduğuna inanıyorum.
Bir rsync
seçenek değilse, bundan sonra tavsiye ederim lftp
:
lftp sftp://user@host.com/path/path/
Ardından mirror
, tekrar tekrar yüklemek için aşağıdaki komutu kullanın:
mirror -R
(Not yineleme varsayılan olduğunu. -R
İçindir ters -. Yerine indirmenin ayna komut yükleme yapmaya eklemeyi deneyin --dry-run
emin beklediğiniz yaptığını yapmak için bir deneme yapmak.)
Veya özyineleme olmadan yüklemek için:
mirror --no-recursion
Aynalamak cd
istediğiniz dizinlere girmelisiniz. Harika çalışıyor!
Yapabiliyorsanız, sshfs kullanın . Bu , çoğu modern ünitede bulunan bir FUSE dosya sistemidir ve herhangi bir SFTP sunucusuyla çalışır. Bu uzak bir dosya sistemidir: uzak yardımcı programları (SFTP protokolü üzerinden) normal yardımcı programlarla değiştirmenize olanak sağlar.
mkdir /mount/point
sshfs server.example.com:/remote/path /mount/point
ls /mount/point
cp -Rp /mount/point/somedir /local/location
fusemount -d /mount/point
Biraz küfür ama benim için işe yarayan şey:
ssh
Uzaktaki makineye giriş yapmak için kullanınsftp
yerel makineye uzaktaki makinedenget
komutu kullanın -r
.sftp> get -r data /opt/bin get: Invalid flag -r
Aslında, 'dizini aktarmak için sftp'yi nasıl kullanırım?'
sftp -r user@server
Ancak bir dizini aktarıyorsanız, ihtiyaçlarınıza bağlı olarak iki daha iyi seçenek önerebilirim. sftp
ssh benzeri bir komut isteminde uzak sunucuya giriş yapmayı gerektirir, ancak tek istediğiniz dosya (lar) ise, daha kolay ve daha hızlı yollar var.
scp
Bir kerelik transfer için, yüklemeyi denemek için:
# upload source directory to remote server
scp -rp source_dir user@server:dest
#download directory from remote server:
scp -rp user@server:source_dir dest
#specifying ssh key:
scp -rp -i ~/.ssh/key user@server:source_dir dest
#remote directory has spaces
scp -rp -i ~/.ssh/key user@server:"source\\ dir" dest
Rsync
Dizinleri düzenli aralıklarla senkronize etmeyi planlıyorsanız, rsync kullanmak daha mantıklı olur. İki dizin arasında delta yapar, aktarım zamanını ve kablo üzerinden veri tasarrufu sağlar.
rsync -r -a -v -e ssh --delete source_dir user@server:dest
En yaygın rsync seçeneklerinden bazıları aşağıda listelenmiştir: ( buradan alınır )
Umarım yardımcı olur!
sunucudan yerel yolunuza
scp -rp user@server:directoryname(full path) .