Jak uzyskać cały katalog w sftp?

189

Właśnie uczę się korzystać z sftp i chcę skopiować katalog z komputera zdalnego na komputer lokalny. Jeśli spróbuję

get [directory]

daje mi ten błąd:

Cannot download non-regular file: /home/mpirocch/Documents

get -R też nie działa.

Mateusz
źródło
2
Recursive put / get został dodany do OpenSSH w wersji 5.4, która została wydana w 2010 roku. Możesz rozważyć aktualizację swoich serwerów, ponieważ dodaje ona również wiele poprawek błędów i lepszych funkcji bezpieczeństwa.
Lèse majesté

Odpowiedzi:

266

Użyj -rflagi (rekurencyjnej):

get -r *
obficie świeże
źródło
16
Dziękujemy za udzielenie odpowiedzi, która faktycznie odpowiada na pytanie.
jonnyflash,
30
Daje mi:get: Invalid flag -r
ghbarratt
2
To daje mi także Nieprawidłową flagę. Nie jestem pewien, czy jest to obsługiwane we wszystkich systemach.
Ben
@Ben: Kiedy zadałem to pytanie w 2009 roku, -rflaga nie istniała. Czy twój system jest aktualny?
Matthew
15
@silvinci nie wszystkie obecne systemy. Nielegalna opcja z CentOS 6.4 openssh-klienci-5.3p1-84.1.el6.x86_64
CrackerJack9
52

Posługiwać się:

scp -r mpirocch@my-server:/home/mpirocch/Documents Documents
Cristian Ciupitu
źródło
3
To działa, ale byłoby miło móc to zrobić z SFTP (aby zobaczyć, co kopiuję, zanim go skopiuję). czy to możliwe?
Matthew
@Matthew: Nie wydaje mi się. Od pewnego czasu zadaję sobie to samo pytanie i najlepszą odpowiedzią, jaką mam w tej chwili scp -r. Lub możesz użyć zaawansowanego klienta SFTP, takiego jak Filezilla.
Cristian Ciupitu,
1
scp -r będzie podążał za dowiązaniami symbolicznymi ...
jsleuth
5
Niektóre systemy mogą zezwalać na dostęp sftp, ale nie scpmogą.
Turion
40

Użyj lftp:

lftp sftp://user@host

Następnie w lftp przejdź cddo katalogu, który chcesz skopiować, i użyj mirrorpolecenia, aby rekurencyjnie pobrać wybrany katalog, w następujący sposób:

mirror

To polecenie akceptuje opcje i argumenty:

mirror [ OPCJE ] [ źródło [ cel ]]

Na przykład opcja -R(lub --reverse) spowoduje przesłanie lokalnego drzewa katalogów do katalogu zdalnego:

mirror -R

Zobacz lftp(1)stronę podręcznika na stronie projektu lub na Debian.org, gdzie znajdziesz inne polecenia i opcje.

bshanks
źródło
4
+1 lftp jest jak mały pakiet magii i radości!
WCWedin
16

cóż, ten mały przewodnik powinien pomóc zdublować serwer zdalny do lokalnego folderu za pomocą lftp

lftp sftp://user:[email protected]:22 -e 'mirror --verbose --use-pget-n=8 -c /remote/path /local/path'

  • sftp:// = używa protokołu SFTP
  • mirror = tryb lustrzany
  • verbose = pokazuje pobierane pliki
  • use-pget-n = liczba segmentów, naprawdę przydatna do przyspieszenia dużych plików
  • parallel = pobiera pliki mnożnika w tym samym czasie

jeśli chcesz pobierać pliki równolegle, wyłącz use-pget-n=8z--parallel=8

Mam nadzieję, że pomoże to każdemu, kto chce wykonać kopię lustrzaną folderu zdalnego do folderu lokalnego

nwgat
źródło
Dzięki, działało to dla mnie po tym, jak inne metody zawiodły (w szczególności brak opcji „-r” na sftp). Pierwsza część polecenia w moim przypadku musiała zostać zacytowana z powodu znaków dolara w haślelftp 'sftp://user:[email protected]:22' -e 'mirror --verbose --use-pget-n=8 -c /remote/path /local/path'
Jason
15

Nie używaj bezpośrednio programu sftp, jeśli możesz znaleźć coś lepszego. W Linuksie wiele menedżerów plików (przynajmniej Nautilus i Dolphin, GNOME i KDE) obsługuje natywnie sftp i zawsze jest sshfs. W systemie Windows jest WinSCP i prawdopodobnie inne . Chodzi o to, aby umożliwić ci dostęp do plików przez sftp, tak jakby były one na zwykłym systemie plików, więc nie musisz się martwić, że masz do nich dostęp przez sftp.

Ryan Thompson
źródło
Wow, nautilus działa bardzo dobrze z SFTP. Dodałem zakładkę w Nautilusie, a teraz jest to absurdalnie łatwe. Dzięki!
Matthew
Miałem problem z wydajnością Nautilus SFTP. Tak, to naprawdę wygodne, ale nie byłem w stanie nasycić sieci 1 Gbit / s przez Nautilus, podczas gdy sftp/sshbyłem przy zwykłym interfejsie wiersza poleceń (transfer plików około 100 MB / s). Problemem był Nautilus na GNU / Linux Mint.
stamster
13

Spróbuj mgetzamiast get.

Wyjaśnienie: mget będzie działać, jeśli znajdziesz się w katalogu, który chcesz skopiować; jeśli zrobisz coś takiego:

sftp> cd dir_to_get
sftp> mget *

pobierze wszystkie pliki z tego katalogu. Jednak będzie to nie rekurencyjnie uzyskać zawartość wszelkich podkatalogów.

Ken Keenan
źródło
1
mget nie działa lepiej niż dostać dla mnie.
Matthew
1
pobieranie Nie można pobrać nieregularnego pliku tym
Dchris,
1
To działało dla mnie w systemie, w którym „get -r” nie działało.
Tchotchke,
10
get -r [directory]

dostaje [directory]i wszystko pod nim, gdzie roznacza rekurencję. Znalazłem to, pisząc helpz sftp.

drkvogel
źródło
1
IMO to najlepsza odpowiedź na to pytanie. :)
ramrunner
3
Jest to kopia odpowiedzi z 29 listopada 2010 r. (Prawie półtora roku temu).
Cristian Ciupitu
5

Podobnie jak w przypadku cp:

scp -rp user@host:/path/to/dir dir

Powyższe pozwoli zachować czasy i tryby oryginalnych plików i podkatalogów. Jest to szczególnie przydatne w przypadku pobierania kopii zapasowych.

Azirafale
źródło
Jest to w zasadzie duplikat odpowiedzi z 29 listopada 10 (prawie dwa lata temu).
Cristian Ciupitu
0

Mam folder Java dist na serwerze zdalnym, na którym mam następujące drzewo:

- dist
--- Audio.jar
--- README
--- lib
----- lib.jar

Cel: chcę używać SFTP? I umieść je w / tmp / <>

Krok 1. sftp remoteuser @ ip

Krok 2. cd / var / tmp

Krok 2. lmkdir / tmp / dist; lmkdir / tmp / dist / lib

Krok 3. lcd / tmp / dist

Krok 4. mget *

Krok 5. lcd / tmp / dist / lib

Krok 6. mget *

Krok 7. Wreszcie mam swój cel

$ ls
Audio.jar  lib  README.TXT
Mniam mniam mniam
źródło