it-swarm.dev

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

Sftp로 디렉토리를 업로드하는 데 문제가 있습니다 (몇몇 수준의 다른 디렉토리가 들어 있음). 나는 gzipping 으로이 문제를 해결할 수 있다는 것을 알고 있지만 그것이 왜 필요한지 알지 못합니다.

어쨌든 시도해

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를 사용해야합니까?

97
Earlz

수정 : 처음에 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

더 잘 구현 된 재귀 put의 경우 PuTTY psftp 명령 줄 도구를 대신 사용할 수 있습니다. PuTTY-tools 데비안 패키지 (그리고 우분투 일 가능성이 높습니다).

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

68
Jander

Sftp가 왜 그렇게하는지 모르겠지만 대상 디렉토리가 이미 존재하는 경우에만 재귀 사본을 사용할 수 있습니다. 그러니 이렇게 ...

sftp> mkdir bin
sftp> put -r bin
130
Useful Dude

rsync를 대신 사용하고 싶을 수도 있습니다. 그 명령은

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

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

22
Shawn J. Goff

lcd : 로컬 폴더 (하위 폴더 포함)

cd : 원격 폴더

put -r .

9
eliseu

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

여기 우리는 간다 :

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

이것은 ./bin 디렉토리를 tar (-cf : = create file), filename-(none, stdout)으로 압축하고 ssh-command를 통해 target.org (IP 일 수도 있음)로 파이프합니다. 따옴표로 수행됩니다 : cd to blah, tar -xf (추출 파일)-없음, 이름 없음, stdin.

마치 집에서 패키지를 포장하고, 포스트로 가져간 다음, 출퇴근 할 수있는 곳으로 이동하여 패키지를 기대하고 엽니 다.

아마도 sftp를 사용하는 훨씬 더 우아한 솔루션이있을 수 있습니다.

8
user unknown

yafc (아직 FTP/SFTP 클라이언트)를 사용할 수 있습니다. -r 옵션이 잘 작동합니다.

2
Dmitry Shpakov

Scp 및 sftp의 강력한 대안 인 rsync 를 사용할 수 있습니다. 특히 머신 A에서 머신 B로 사본을 업데이트 할 때 t 변경되지 않은 파일을 복사하십시오. 또한 컴퓨터 A에서 삭제 된 컴퓨터 B에서 파일을 제거 할 수도 있습니다 (물론 지시가있을 때만).

예를 들면 다음과 같습니다.

rsync -zrp /home/a/ [email protected]st.com:/home/b/  

-r 옵션은 파일을 재귀 적으로 복사하는 데 사용되며 -z는 전송 중에 압축을 활성화하며 -p는 복사 할 때 파일 권한 (파일 작성, 편집 등)을 유지합니다. 이는 scp가 AFAIK를 수행하지 않는 것입니다. 더 많은 옵션이 가능합니다. 평소와 같이 매뉴얼 페이지를 읽으십시오.
카롤 로스의 원래 답변

1
Sherlock

Ssh로 원격 서버에 로그인하고 sftp를 사용하여 상자에 다시 연결 한 다음 get -r 명령을 사용하여 디렉토리를 원격 서버로 전송하십시오. get 명령을 사용하면 디렉토리를 작성하지 않고 디렉토리를 재귀 적으로 전송할 수 있습니다.

ssh remote ip
sftp local ip 
get -r whichever-dir
0
Cyb3rT00th

SFTP 사례 :

내 FTP에서 해당 구조를 복사해야했습니다.

mainfolder --- folder --- subfolder
                  |           |
              file1.txt   file2.txt

내 문제가 해결되었습니다.

cd ./mainfolder
mkdir folder
put -r /from/source/folder/* /mainfolder/folder/
cd ./folder
mkdir subfolder
put -r /from/source/folder/subfolder/* /mainfolder/folder/subfolder/
0
Nikita Malovichko

방금 Arch Linux Wiki 에서 sshfs를 사용하여 sftp-share를 마운트 할 수 있다는 것을 알게되었습니다. chroot 및 jail 를 가진 sftp-server를 실행 중이며 sshfs가 매우 잘 작동합니다.

  1. 마운트 : sshfs <sftpuser>@<server>:<read/writable/directory> <your/local/mount/directory>
  2. 마운트 해제 : fusermount -u <your/local/mount/directory>
0
saltani