get
파일을 다운로드하는 데 사용할 수 있지만 sftp
이미 대상 폴더에 있는 파일을 다시 다운로드하는 것을 방지할 수 있는지 궁금합니다.
답변1
sftp
제한된 능력. 그럼에도 불구하고 이 get
명령에는 이 문제를 해결하는 옵션이 있습니다.get -a
부분 다운로드를 완료합니다. 따라서 파일이 클라이언트에 이미 존재하고 최소한 서버에 있는 파일만큼 크면 다운로드되지 않습니다. 파일이 존재하지만 길이가 더 짧은 경우 파일의 끝 부분이 전송됩니다. 이는 로컬 파일이 다운로드가 중단된 결과인 경우에 해당됩니다.
SFTP를 통해 복잡한 작업을 수행하는 가장 쉬운 방법은 다음을 사용하는 것입니다.SSHFS. SSHFS는 SFTP를 사용하여 원격 파일 시스템을 로컬 파일 시스템으로 표시하는 파일 시스템입니다. 클라이언트 측에서 SSHFS에는 다음이 필요합니다.퓨즈, 대부분의 최신 unice에서 사용할 수 있습니다. 서버에서 SSHFS에는 SFTP가 필요합니다. 서버가 SFTP를 허용하는 경우 SSHFS를 사용할 수 있습니다.
mkdir server
sshfs server.example.com:/ server
rsync -a server/remote/path /local/path/
fusermount -u server
SSHFS를 통한 rsync는 원격 측에서 부분 체크섬을 계산할 수 없기 때문에 델타 전송 알고리즘을 활용할 수 없습니다. 일회성 다운로드에는 문제가 되지 않지만 수정된 파일을 동기화하는 경우에는 낭비입니다. 수정된 파일을 효과적으로 동기화하려면 를 사용하세요 rsync -a server:/remote/path /local/path/
. 하지만 이를 위해서는 SFTP 액세스뿐만 아니라 SSH 셸 액세스도 필요합니다. 그러나 셸 액세스는 rsync 명령으로 제한될 수 있습니다.
답변2
-a
다음 get
명령 으로 플래그를 사용할 수 있습니다 .
$ sftp example.com
sftp> get -a hello.txt
물론 *
전체 디렉토리를 다운로드하도록 지정할 수도 있습니다.
그러나 몇 가지 주의 사항이 있습니다.
- 이는 OS X에서는 작동하지 않습니다. 다른 시스템에서는 작동하지 않을 수 있습니다. 우분투 15.04에서 테스트했습니다.
- 이 옵션은 중단된 다운로드를 재개하도록 설계되었습니다. 파일이 변경된 경우 다운로드가 손상됩니다.
더 나은 옵션은 다음을 사용하는 것입니다 rsync
.
rsync example.com:hello.txt
이렇게 하면 항상 서버에 파일이 제공되고 로컬 복사본과 원격 복사본 간의 차이점만 전송되며(다른 경우) 보편적으로 사용할 수 있습니다.