sftp에서 전체 디렉토리를 얻으려면 어떻게해야합니까?


189

sftp 사용법을 배우고 있는데, 원격 컴퓨터에서 로컬 컴퓨터로 디렉토리를 복사하고 싶습니다. 내가 시도하면

get [directory]

이 오류가 발생합니다.

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

get -R 작동하지 않습니다.


2
2010 년에 릴리스 된 5.4에서는 재귀 적 넣기 / 받기가 OpenSSH에 추가되었습니다. 또한 많은 버그 수정 및 향상된 보안 기능을 추가하므로 서버 업그레이드를 고려할 수 있습니다.
Lèse majesté

답변:


266

-r(재귀) 플래그를 사용하십시오 .

get -r *

16
실제로 질문에 대한 답변을 해 주셔서 감사합니다.
jonnyflash

30
제공 :get: Invalid flag -r
ghbarratt

2
이것은 또한 잘못된 플래그를 제공합니다. 이것이 모든 시스템에서 지원되는지 확실하지 않습니다.
Ben

@Ben : 2009 년에이 질문을했을 때 -r깃발이 없었습니다. 시스템이 최신 상태입니까?
Matthew

15
@silvinci는 모든 현재 시스템이 아닙니다 . CentOS 6.4에서 잘못된 옵션 openssh-clients-5.3p1-84.1.el6.x86_64
CrackerJack9

52

사용하다:

scp -r mpirocch@my-server:/home/mpirocch/Documents Documents

3
이것은 작동하지만 SFTP 에서이 작업을 수행 할 수 있으면 좋을 것입니다 (따라서 복사하기 전에 내가 무엇을 복사하는지 볼 수 있습니다). 이게 가능해?
Matthew

@ 매튜 : 나는 그렇게 생각하지 않습니다. 나는 한동안 같은 질문을 해왔으며 지금 당장 가지고있는 최선의 대답은 scp -r입니다. 또는 Filezilla와 같은 고급 SFTP 클라이언트를 사용할 수 있습니다.
Cristian Ciupitu

1
SCP -r은 ... 심볼릭 링크를 따를 것이다
jsleuth

5
일부 시스템은 액세스를 허용 sftp하지만 허용 하지 않을 scp수 있습니다.
Turion

40

사용 lftp:

lftp sftp://user@host

그런 다음 lftp 내 cd에서 복사하려는 디렉토리로 이동하고 mirror명령을 사용하여 다음과 같이 선택한 디렉토리를 재귀 적으로 다운로드하십시오.

mirror

이 명령은 옵션과 인수를 허용합니다.

미러 [ 옵션 ] [ 소스 [ 대상 ]]

예를 들어 -R(또는 --reverse) 옵션을 사용하면 로컬 디렉토리 트리를 원격 디렉토리에 업로드합니다.

mirror -R

다른 명령 및 옵션 에 대해서는 프로젝트 사이트 또는 Debian.org lftp(1) 매뉴얼 페이지 참조하십시오 .


4
+1 lftp는 마법과 기쁨의 작은 묶음과 같습니다!
WCWedin

16

글쎄,이 작은 가이드는 lftp를 사용하여 원격 서버를 로컬 폴더에 미러링합니다.

lftp sftp://user:password@server.org:22 -e 'mirror --verbose --use-pget-n=8 -c /remote/path /local/path'

  • sftp:// = SFTP 프로토콜 사용
  • mirror = 미러 모드
  • verbose = 다운로드중인 파일을 표시합니다
  • use-pget-n = 세그먼트 수, 큰 파일의 속도를 높이는 데 정말 유용
  • parallel = 승수 파일을 동시에 다운로드

아웃 병렬 스위치에 파일을 다운로드하려는 경우 use-pget-n=8--parallel=8

이것이 원격 폴더를 로컬 폴더에 미러링 해야하는 사람에게 도움이되기를 바랍니다.


고마워, 다른 방법이 실패한 후 (특히 sftp에서 "-r"옵션이 없음) 나에게 도움이되었습니다. 필자의 경우 암호의 달러 문자로 인해 명령의 첫 부분을 인용해야했습니다.lftp 'sftp://user:pa$$word@server.org:22' -e 'mirror --verbose --use-pget-n=8 -c /remote/path /local/path'
Jason

15

더 나은 것을 찾을 수 있다면 sftp 프로그램을 직접 사용하지 마십시오. Linux의 경우 많은 파일 관리자 (적어도 Nautilus 및 Dolphin, 그놈 및 KDE)는 sftp를 기본적으로 지원하며 항상 sshfs가 있습니다. Windows의 경우 WinSCP 및 기타가 있습니다 . 이 모든 것의 요점은 마치 일반 파일 시스템에있는 것처럼 sftp를 통해 파일에 액세스 할 수 있도록하므로 sftp를 통해 파일에 액세스하는 것을 신경 쓸 필요가 없습니다.


와우, 노틸러스는 SFTP와 잘 작동합니다. 노틸러스에 책갈피를 추가했는데 이제는 엄청나게 쉽습니다. 감사!
Matthew

노틸러스 SFTP에 성능 문제가있었습니다. 예, 정말 편리하지만 노틸러스를 통해 1Gbit / s 네트워크를 포화시킬 수 없었습니다. 일반 sftp/ssh명령 행 인터페이스로는 (cca 100MB / s 파일 전송)이었습니다. 그래서 문제는 GNU / Linux Mint의 노틸러스였습니다.
스탬 스터

13

mget대신 사용해보십시오 get.

명확한 설명 : mget 것입니다 당신이 복사 할 디렉토리 내에있는 경우 작동; 이런 식으로하면 :

sftp> cd dir_to_get
sftp> mget *

해당 디렉토리의 모든 파일을 가져옵니다. 그러나 하위 디렉토리의 컨텐츠를 재귀 적으로 가져 오지 않습니다 .


1
mget은 나를 위해 얻는 것보다 잘 작동하지 않습니다.
Matthew

1
비정규 파일을 다운로드 할 수 없음
Dchris

1
이것은 'get -r'이 작동하지 않는 시스템에서 저에게 효과적이었습니다.
Tchotchke

10
get -r [directory]

재귀를 의미 [directory]하는 모든 것을 얻습니다 r. help에서 입력하여 이것을 발견했습니다 sftp.


1
IMO 이것은이 질문에 가장 적합한 답변입니다. :)
ramrunner

3
이것은의 중복 대답 에서 11월 29일 '10 (거의 1 년 반 전에).
Cristian Ciupitu

5

와 같이 cp:

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

위의 내용은 원본 파일과 하위 디렉토리의 시간과 모드를 유지합니다. 이것은 특히 백업 검색에 유용합니다.


이것은 기본적으로 11 년 29 월 10 일 (거의 2 년 전) 의 답변 과 중복 됩니다.
Cristian Ciupitu

0

원격 서버에 Java dist 폴더가 있으며 다음 트리가 있습니다.

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

목표는 SFTP를 사용하고 싶습니까? 그리고 / tmp / <>에 넣으십시오.

1 단계. sftp remoteuser @ ip

2 단계. cd / var / tmp

단계 2. lmkdir / tmp / dist; lmkdir / tmp / dist / lib

3 단계. LCD / tmp / dist

4 단계. mget *

5 단계. LCD / tmp / dist / lib

6 단계. mget *

7 단계. 마침내 내 목표가 있습니다

$ ls
Audio.jar  lib  README.TXT
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.