sftp를 사용하여 디렉토리를 업로드하시겠습니까?

sftp를 사용하여 디렉토리를 업로드하시겠습니까?

SFTP를 통해 디렉터리(여러 수준 깊이의 다른 디렉터리가 포함되어 있음)를 업로드하는 데 몇 가지 문제가 있습니다. 압축으로 이 문제를 해결할 수 있다는 것은 알지만 이것이 왜 필요한지 이해하지 못합니다.

아무튼 노력해본다

sftp> put bin/
Uploading bin/ to /home/earlz/blah/bin
bin/ is not a regular file
sftp> put -r bin/
Uploading bin/ to /home/earlz/blah/bin
Couldn't canonicalise: No such file or directory
Unable to canonicalise path "/home/earlz/blah/bin"

나는 마지막 오류 메시지가 완전히 바보 같다고 생각합니다. 그러면 디렉토리가 존재하지 않습니까? 왜 디렉토리를 만들지 않습니까?

어쨌든 sftp에 이런 문제가 있는 걸까요, 아니면 scp를 사용해야 하는 걸까요?

답변1

sftp가 왜 이렇게 하는지는 모르겠지만 대상 디렉터리가 이미 존재하는 경우에만 재귀적으로 복사할 수 있습니다. 그러니 이렇게 하세요...

sftp> mkdir bin
sftp> put -r bin

답변2

수정됨: 저는 처음에 OpenSSH가 이를 지원하지 않는다고 잘못 주장했습니다 put -r. 그렇습니다. 그러나 매우 이상한 방식으로 수행됩니다. 대상 디렉토리가 이미 존재하고 소스 디렉토리와 동일한 이름을 가질 것으로 예상되는 것 같습니다.

sftp> put -r source
 Uploading source/ to /home/myself/source
 Couldn't canonicalize: No such file or directory
 etc.
sftp> mkdir source
sftp> put -r source
 Uploading source/ to /home/myself/source
 Entering source/
 source/file1
 source/file2

특히 이상한 점은 대상에 대해 다른 이름을 지정하는 경우에도 작동한다는 것입니다.

sftp> put -r source dest
 Uploading source/ to /home/myself/dest
 Couldn't canonicalize: ...
sftp> mkdir dest
sftp> put -r source dest
 Uploading source/ to /home/myself/dest/source
 Couldn't canonicalize: ...
sftp> mkdir dest/source
sftp> put -r source dest
 Uploading source/ to /home/myself/dest/source
 Entering source/
 source/file1
 source/file2

더 나은 재귀 구현을 위해 putPuTTY psftp명령줄 도구를 사용할 수 있습니다. putty-toolsDebian(아마도 Ubuntu) 패키지에 있습니다 .

또는 GUI를 사용하려는 경우 Filezilla가 원하는 작업을 수행합니다.

답변3

당신은 그것을 사용하는 데 관심이 있을 수 있습니다 rsync. 그 명령은

 rsync --delete --rsh=ssh -av bin/ remote-ip-or-fqdn:/home/earlz/blah/bin/

그러면 모든 내용이 복사되어 bin/원격 서버에 저장됩니다 /home/earlz/blah/bin/. 추가 보너스로 먼저 원격 측의 파일이 변경되지 않았는지 확인하고 변경되지 않은 경우 다시 보내지 않습니다. 추가적으로 -z 옵션을 추가하면 자동으로 압축됩니다.

답변4

압축하지 않지만 tar를 포함하는 다소 복잡한 답변을 제안할 수 있습니까?

여기 있습니다:

tar -cf - ./bin | ssh target.org " ( cd /home/earlz/blah ; tar -xf - ) "

이렇게 하면 tar(-cf:=create file), 파일 이름 -(없음, stdout)을 사용하여 ./bin 디렉터리를 tar하고 target.org(IP도 가능)에 ssh를 실행합니다. 여기서 명령 실행은 따옴표로 묶입니다. : cd to blah 및 tar -xf (추출 파일) - 아무것도 없고, 이름도 없고, 단지 표준 입력입니다.

이는 집에서 소포를 포장하여 우체국으로 가져간 다음 직장에 가서 소포가 있을 것으로 예상되는 곳에서 여는 것과 같습니다.

어쩌면 sftp를 사용하는 것보다 더 우아한 솔루션이 있을 수도 있습니다.

관련 정보