Yanıtlar:
sftpgibi cpve scp, bir klasörü kopyaladığınızda (ve içeriği açık bir şekilde), klasöre tekrarlı olarak -rseçenekle aktarmayı istediğinizi açıkça söylemeniz gerektiğini belirtir .
Yani, -rkomuta ekleyin .
-riçin sftpbağ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.
( -aseç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 -Pgarip (hata?) bir protocol version mismatchhatadan kaçınmak için kullanırken zorunlu görünmektedir ); -z= aktarılan verilerin sıkıştırılmasını etkinleştir.
-lanahtarı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 -liç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 rsyncseç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-runemin beklediğiniz yaptığını yapmak için bir deneme yapmak.)
Veya özyineleme olmadan yüklemek için:
mirror --no-recursion
Aynalamak cdistediğ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:
sshUzaktaki makineye giriş yapmak için kullanınsftpyerel makineye uzaktaki makinedengetkomutu 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. sftpssh 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) .