sftp를 사용하여 디렉토리를 전송 하시겠습니까?


50

sftp를 사용하여 파일이 포함 된 디렉토리를 전송하려고하면 오류 메시지가 나타납니다.

skipping non-regular file directory_name

디렉토리에는 두 개의 파일과 두 개의 서브 디렉토리가 있습니다.

내가 무엇을 잘못하고 있지?

답변:


48

sftp, 같은 cpscp, 당신은 폴더 (및 그 내용, 분명히)를 복사 할 때, 당신은 명시 적으로 당신이 함께 재귀 적 폴더를 전송할를 말할 있어야합니다 -r옵션을 선택합니다.

따라서 -r명령에 추가 하십시오.


2
-r put 명령 후에? "put : Invalid flag -r"오류 메시지 메시지가 표시됩니다. 원래 sftp 명령에 추가해도 작동하지 않습니다.
haziz

5
추가 -r받는 sftp당신이 연결할 때 명령. sftp -r user@host
케빈

1
@Kevin 다음과 같은 오류가 발생합니다 "sftp : unknown option --r"
Amatya

2
이 있음을주의 꽤 오랜 버그 에서 OpenSSH의 SFTP에가 : 재귀 적으로 원격 서버에 디렉토리를 복사 할 때, 디렉토리 자체가 이미, 그렇지 않으면 전송이 아닌 명시 적 오류 메시지와 함께 실패합니다 대상 서버에 존재해야합니다 Couldn't canonicalise: No such file or directory.
WhiteWinterWolf

5
: 같은 것을해야한다# sftp user@remote-host #> get -r remote-folder
hbinduni

20

나는 당신이 사용할 것을 제안 할 수 있습니다 rsync. 보안 연결을 통해 파일을 이동할 때 다소 산업 표준입니다.

rsync -alPvz ./source_dir server.com:destination_dir

지금까지 몇 년 동안 사용해 왔던 것입니다.

( -a옵션은 디렉토리 재귀와 같은 것을 처리합니다)


3
언급 된 매개 변수에 대한 약간의 설명 : -a= 재귀 + 기호 링크, 권한, 수정 시간, 소유자, 그룹, 특수 파일 및 장치 파일 유지 (후자는 수퍼 유저 권한 필요); -l= 심볼릭 링크 유지 (이미 포함 -a); -P= 전송 중 진행률 표시 + 부분적으로 전송 된 파일 유지; -v= 상세 모드 (그러나 -P이상한 (버그?) protocol version mismatch오류 를 피하기 위해 사용할 때는 필수 인 것처럼 보입니다 ); -z= 전송 된 데이터의 압축을 활성화합니다.
WhiteWinterWolf

@WhiteWinterWolf -l스위치 사용 여부에 따라 버전에 따라 달라집니다 . 나는 이전 버전은 포함하지 않았다 기억 -l-a.
polemon

5

당신은 또한 사용할 수 있습니다 scp. 일반적인 형식은

scp -rp sourceDirName username@server:destDirName

scp"보안 사본"을 의미합니다. 깃발은

  • -r 하위 디렉토리로 재귀
  • -p 수정 시간 유지

나머지 항목은 설명이 필요하다고 생각합니다


및 비표준 포트를 사용할 때 scp -rp -P <port> ....
Pancho

4

이것은 나를 위해 작동합니다 :

1) sftp원격 호스트 를 통해 연결

2) 복사하려는 원격 디렉토리로 변경하십시오. (예 : cd 음악)

3) 복사하려는 로컬 디렉토리로 변경하십시오. (예 : LCD 데스크탑)

4) 다음 명령을 발행하십시오. get -r *


4

rsync옵션이 아닌 경우 다음을 권장합니다 lftp.

lftp sftp://user@host.com/path/path/

그런 다음 mirror명령을 사용하여 다음 과 같이 재귀 적으로 업로드하십시오.

mirror -R

(즉, 재귀가 기본입니다 참고가. -R입니다 - 대신 다운로드 미러 명령 업로드를 만들기 위해 추가보십시오. --dry-run당신이 무엇을 기대하고있어 확인하기 위해 시험을 할 수 있습니다.)

또는 재귀없이 업로드하려면 다음을 수행하십시오.

mirror --no-recursion

cd미러링하려는 디렉토리 로 들어가야합니다. 잘 작동합니다!


2

가능하면 sshfs를 사용하십시오 . 그것은이다 FUSE의 가장 현대적인 유닉스에서 사용할 수, 파일 시스템, 및 SFTP 서버와 함께 작동합니다. 이것은 원격 파일 시스템입니다. 일반적인 유틸리티를 사용하여 SFTP 프로토콜을 통해 원격 파일을 조작 할 수 있습니다.

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

약간의 문제이지만 나를 위해 작동하는 것은 다음과 같습니다.

  1. ssh원격 컴퓨터에 로그인하는 데 사용
  2. 사용하여 sftp로컬 컴퓨터에 원격 컴퓨터에서
  3. 그런 다음 옵션 get과 함께 명령을 사용하여 -r디렉토리와 모든 파일을 이동하십시오.

1
-r과 함께 작동하지 sftp> get -r data /opt/bin get: Invalid flag -r
Skynet

0

실제로 'sftp를 사용하여 디렉토리를 전송하는 방법'이라는 질문이있는 경우

 sftp -r user@server

그러나 디렉토리를 전송하는 경우 필요에 따라 두 가지 더 나은 옵션을 제안 할 수 있습니다. sftpssh와 같은 명령 프롬프트에서 원격 서버에 로그인해야하지만 원하는 파일 만 있으면 더 쉽고 빠른 방법이 있습니다.

SCP

한 번 전송하려면 업로드를 시도하십시오.

 # 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를 사용하는 것이 더 합리적입니다. 두 디렉토리 사이에 델타를 수행하여 전송 시간과 데이터를 유선으로 저장합니다.

rsync -r -a -v -e ssh --delete source_dir user@server:dest

다음은 가장 일반적인 rsync에 옵션 중 일부의 목록입니다 : ( 여기에서 촬영 )

  • --delete-발신자 (시스템)에 존재하지 않는 파일을 삭제합니다
  • -v-상세 (-vv는 더 자세한 정보를 제공합니다)
  • -e "ssh 옵션"-ssh를 원격 쉘로 지정
  • -a-아카이브 모드-권한 (소유자, 그룹), 시간, 기호 링크 및 장치를 보존합니다.
  • -r-디렉토리로 재귀
  • -z-전송 중 파일 데이터 압축
  • --exclude 'foldername'– 해당 폴더를 전송에서 제외
  • -P – 전송 중 진행률 표시

희망이 도움이됩니다!


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