Bir Dizini Aktarmak İçin Sftp Kullanmak?


50

Dosyaları içeren bir dizini aktarmak için sftp kullanmaya çalıştığımda bir hata mesajı alıyorum:

skipping non-regular file directory_name

Dizin birkaç dosya ve iki alt dizin içerir.

Neyi yanlış yapıyorum?

Yanıtlar:


48

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 .


2
-Rut komutundan sonra mı? Yaparsam "put: Invalid flag -r" hata mesajı alıyorum. Orijinal sftp komutuna eklenmesi de çalışmaz.
haziz

5
Ekle -riçin sftpbağlanmakta olduğunuz zaman komuta. sftp -r user@host
Kevin,

1
@Kevin Şu hatayı alıyorum "sftp: unknown option --r"
Amatya

2
Bir olduğunu dikkat oldukça uzun ayakta böcek OpenSSH en SFTP içinde: uzak sunucuya yinelemeli bir dizin kopyalarken, dizinin kendisi zaten başka türlü transferi olmayan bir açık hata iletisiyle başarısız olur hedef sunucuda bulunması gerekir: Couldn't canonicalise: No such file or directory.
WhiteWinterWolf

5
şöyle bir şey olmalı:# sftp user@remote-host #> get -r remote-folder
hbinduni

21

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)


3
Belirtilen parametreler hakkında biraz açıklama: -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.
WhiteWinterWolf

@WhiteWinterWolf -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.
polemon

5

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ı koru

Diğer öğelerin kendi kendini açıklayıcı olduğuna inanıyorum.


ve scp -rp -P <port> .... standart olmayan bir bağlantı noktası kullanırken
Pancho

4

Bu benim için çalışıyor:

1) sftpuzaktaki ana bilgisayara bağlanın

2) kopyalamak istediğiniz uzak dizine geçin. (Örnek: cd Müzik)

3) şeyleri kopyalamak istediğiniz yerel dizine değiştirin. (Örnek: lcd Masaüstü)

4) Bu komutu verin: get -r *


4

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!


2

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

0

Biraz küfür ama benim için işe yarayan şey:

  1. sshUzaktaki makineye giriş yapmak için kullanın
  2. Kullanım sftpyerel makineye uzaktaki makineden
  3. Ardından dizini ve tüm dosyalarını taşımak için seçeneği olan getkomutu kullanın -r.

1
-r ile çalışmayınsftp> get -r data /opt/bin get: Invalid flag -r
Skynet

0

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 )

  • --delete - göndericide bulunmayan dosyaları sil (sistem)
  • -v - verbose (-vv daha ayrıntılı bilgi sağlayacaktır)
  • -e "ssh options" - ssh komutunu uzak kabuk olarak belirtin
  • -a - arşiv modu - izinleri (sahipler, gruplar), süreleri, sembolik bağlantıları ve cihazları korur
  • -r - dizinlere geri dön
  • -z - aktarım sırasında dosya verilerini sıkıştır
  • --exclude 'foldername' - ilgili klasörü transferden çıkarır
  • -P - aktarım sırasında ilerlemeyi göster

Umarım yardımcı olur!


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.