FTP를 통한 rsync 사용 방법


187

유닉스 :

다음 cmd 줄이 제대로 작동합니다.

rsync -avr -e ssh /home/dir user@example.com:/home/

그러나 FTP 서버 만있는 원격 서버로 rsync하도록 지금 설정해야합니다. 어떻게하면 되나요?

나는 rsync 도움말을 보았지만 빨리 잃어 버렸습니다 (이 일을 자주하지는 않습니다).


21
이것은 IRC를 통해 HTTP를 사용하는 방법이나 SMTP를 통해 FTP를 사용하는 방법을 묻는 것과 비슷합니다.
Juliano

2
어쩌면 당신이 이것을하고 싶어하는 당신의 추론 중 일부를 설명 할 수 있다면, 우리는 당신이 실용적인 해결책을 생각해 내도록 도울 수 있습니다.
James

1
본질적으로 공유 호스팅 서버에서 백업을 자동화하려고했지만 rsync의 작동 방식을 이해하지 못했습니다. 나는 지금 vps로 옮겼고 더 이상 ftp의 제한이 없습니다
bumperbox

Duplicity는 당신의 신입니다 : scie.nti.st/2013/4/13/…
user956584

경우 배포 하고, 무슨 일이 당신의 마음에, 당신은, NodeJS 마음을 확인하지 않는 dploy을 , 게으른 자식 잘 작동
프랭크 Nocke

답변:


78

당신은하지 않습니다. rsync는 당신을 위해 그것을 할 수 없으며, 그것은 자체 프로토콜이며 FTP를 통해 작동하지 않습니다.

그러나 csync 시도 할 수 있습니다 . IIRC는 HTTP를 통해 rsync와 유사한 동작을 제공합니다. FTP를 통해 작동하는지에 대해서는 언급 할 수 없으므로 시도해야합니다.


1
상기 찾고 합성 동기화 웹 페이지 , 그것은 SFTP를 지원하지만 일반 FTP에 대한 지원에 대한 언급이 없다.
Keith Thompson

162

다른 사람들이 언급 한 이유로 rsync 가 작동하지 않습니다. 그러나 lftpncftp 에는 모두 필요에 맞는 "미러"모드가 있습니다.

나는 이것을 사용하여 로컬 디렉토리에서 ftp 또는 sftp 웹 호스트로 물건을 푸시합니다.

lftp -c "set ftp:list-options -a;
open ftp://user:password@your.ftp.com; 
lcd ./web;
cd /web/public_html;
mirror --reverse --delete --use-cache --verbose --allow-chown  
--allow-suid --no-umask --parallel=2 --exclude-glob .svn"

2
lftp는 매우 좋습니다. 내가 찾은 또 다른 하나 wput는 내장 대역폭 제한이 있습니다.
karmakaze

122

쓴 것처럼 이젤 , lftp좋은 도구입니다.

스크립트를 매개 변수화하고

exclude-glob

쉘의 glob 기능 (* ,? ..)을 사용하여 파일 이름을 제외하는 옵션 :

#!/bin/bash    
HOST="your.ftp.host.dom"
USER="username"
PASS="password"
FTPURL="ftp://$USER:$PASS@$HOST"
LCD="/path/of/your/local/dir"
RCD="/path/of/your/remote/dir"
#DELETE="--delete"
lftp -c "set ftp:list-options -a;
open '$FTPURL';
lcd $LCD;
cd $RCD;
mirror --reverse \
       $DELETE \
       --verbose \
       --exclude-glob a-dir-to-exclude/ \
       --exclude-glob a-file-to-exclude \
       --exclude-glob a-file-group-to-exclude* \
       --exclude-glob other-files-to-exclude"

경고 : 대상 디렉토리가 존재하는지 확인하십시오. 그렇지 않으면 cd 명령이 실패하므로 파일 트리 삭제를 포함한 조작이 잘못된 디렉토리 (루트)에서 발생합니다!

--deletedefaut에 의해 옵션이 비활성화 되도록 스크립트를 업데이트 했습니다.를 주석 해제하여 활성화하십시오 DELETE= command.


큰 무리를 도와주었습니다. 그러나 "set ftp : list-options -a;"를 제거해야했습니다. 엉망인 물건.
mat

1
SFTP (FTPS)와 동일한 기능을하는 이와 같은 것이 있습니까?
trusktr

1
cd $RCDa-ty-with-a-popo가 실수로 잘못된 디렉토리에서 파일을 삭제하지 못하도록 하기 전에이 작업을 수행합니다 set cmd:fail-exit yes. ( lftp다음 명령을 실행할 때까지 실제로 종료 된 것으로 보이지 는 않습니다.) — cd $LCD이 작업을 수행 하기 전에 (로컬 쉘에서, 즉 스크립의 맨 위에) : set -eu.
KajMagnus 2016 년

3
실제로 스크립트를 처음 실행할 때 아직 원격 디렉토리를 만들지 않았으므로 스크립트가 존재하지 않는 디렉토리에 CD를 넣지 못했습니다. 그런 다음 스크립트에 시작 mirror하여, 그리고 --delete: D 파일을 잘못된 디렉토리에서. (그러나 나는 다시 그들을 복사, 그래서 그것은 중요하지 않았다 경우에 아마 다른 사람을 위해 중요하다..)
KajMagnus

1
'set -eu'및 'cd $ LCD'사용에 대한 @KajMagnus '조언을 따를뿐만 아니라'cd $ LCD '앞에'mkdir -p $ LCD '를 추가하면 디렉토리가 존재하는지 확인할 수 있습니다.' 다시.
Paul Gear

25

실제로 수행하려는 작업에 따라 완전히 다른 또 다른 방법을 사용 curlftps하여 ftp 폴더를 마운트 한 다음 rsync두 개의 "로컬"폴더 를 마운트 할 수 있습니다 .

배포판에 따라 설치가 다르므로 일반화 할 수는 없지만 설치 fuse하고 curlftpfs( fuse기본적으로 데비안이 기본적으로 이미 설치되어 있음) 다음을 수행하십시오.

  1. sudo apt-get install curlftpfs

  2. fuse모듈이로드 되었는지 확인하십시오 ( modprobe fuse)

  3. sudo curlftpfs ftp.yourserver.com /path/to/ftp/folder/ -o user=username:password,allow_other

마지막 쉼표 뒤에 공백이 없습니다 (오타가 아님). 당신이 그것에 만족하거나 매번 그것을하고 싶지 않다면, 당신은 그것을 fstab에 추가 할 수 있습니다 (일반적으로 /etc/fstab) :

curlftpfs#user:password@ftp.yourserver.com /path/to/ftp/folder/ fuse auto,user,uid=1000,allow_other 0 0

이 경우 퓨즈 모듈을 먼저로드해야합니다.

그러나 두 가지 사항에 대해 조언하십시오.

  • 개발자가 1-2 년 전에 프로젝트를 중단했기 때문에 당분간 사용 가능한 / 안정적인 방법을 모르겠습니다.
  • 비밀번호에 이상한 문자 curlftpfs가 포함되어 있으면 실패 할 수 있습니다 (을 사용하여 무언가를 수행 할 수 있음 .netrc).

FTP 퓨즈와 rsync는 질문에 가장 가깝지만 작은 파일 집합 외에는 분명히 미쳤습니다.
Steve-o

1
왜 미치겠어요? 기본적으로 rsync stat ()는 내용을 비교하지 않습니다. 이것은 ftp 클라이언트와 함께 ls -l로 수행 할 수 있습니다.
ptman

실제로 (rsnapshot을 통해) 시도했지만 작동하지 않아 각 파일이 반환되고 오류가 발생하여 rsync가 링크를 만들 수 없음을 나타냅니다. 그래서 rsnapshot도와 함께 속임수를 썼는지 lftp를 사용하여
콘스탄틴 Pereiaslov

14.04 LTS에 완벽 함; 추가 팁 : 당신이 당신의 FTP 사이트를 마운트 해제 할 준비가되면 간단하게 사용하는 umount DIR경우 DIR귀하이었다 /path/to/ftp/folder위.
Joe

1
2017, 그리고 여전히 작동합니다! 솔직히 FTP 사이트 enmasse에서 파일을 복사하는 가장 쉬운 방법입니다. 로컬로 마운트 한 다음 로컬 인 것처럼 rsync
td512

16

weex은 ...

Weex는 웹 페이지 또는 다른 FTP 아카이브를 원격으로 유지 관리하는 작업을 자동화하도록 설계된 유틸리티입니다. 필요에 따라 업로드 및 원격 삭제를 수행하여 로컬 파일 세트를 원격 서버에 동기화합니다.


2
매력처럼 작동합니다! 당신이 이것을 이렇게 실행 : $ weex yourFTPconfigName여기 수동 linuxcertif.com/man/1/weex
sobi3ch

9

rsync는 ftp를 통해 작동하지 않습니다. 원격 측에는 rsync 데몬 또는 rsync를 호출 할 수있는 쉘이 필요합니다. Ftp는 일반적으로 몇 가지 명령을 호출 할 수 있으며 rsync는 그 중 하나가 아닙니다. "lftp"와 같은 ftp 작업을 자동화하기위한 다른 도구가 있습니다.




5

curlftpfs를 사용하여 ftp를 마운트하고 http://linux.die.net/man/1/curlftpfs 이후에 rsync를 사용할 수 있습니다


ServerFault에 오신 것을 환영합니다! 이것은 좋은 출발 일지 모르지만 이것이 왜 더 나은 접근 방식인지, 어떻게 할 것인지에 대한 모의에 대한 기술적 세부 사항이 합리적 일 수 있습니다.
Scott Pack

4

GVFS / FTP를 사용하고 있습니다. gigolo를 사용하여 원격 FTP 서버를 마운트합니다. 로컬 디렉토리로 볼 때 로컬 파일에서 작동하는 거의 모든 것이 작동합니다. rsync는 파일을 전송하지 않고 파일을 비교하기 위해 원격으로 파일 해시를 계산하도록 설계되었지만 가상 파일을 사용하여 파일을 전송하면 파일이 전송됩니다. unison과 freefilesync는 일반적으로 잘 작동하지만 업로드 된 파일의 이름을 바꾸고 싶을 때 문제가 발생했습니다. gvfs 1.6.1에서 문제가 될 수 있습니다.


3

Jonas S의 솔루션은 상황에 따라 유용 할 수 있습니다. 예를 들어 다운로드 속도가 빠르고 업로드 속도가 느린 경우 서버에서 파일을 확인하는 것이 불필요하게 파일을 업로드하는 것보다 비교적 빠를 수 있습니다.

CurlFTPFS를 사용하고 싶을 수도 있습니다. http://packages.ubuntu.com/search?suite=default§ion=all&arch=any&searchon=names&keywords=curlftpfs

일반적으로 rsync 대신 일반 FTP 클라이언트를 사용하는 것이 좋습니다.


2

나는 당신이 이것을 할 수 있다고 믿지 않는다. Rsync하려는 서버는 FTP 서버 만 실행하고 Rsync가 그것을 보내는 명령을 이해하지 못할 것이다.

포트 21에만 액세스 할 수 있지만 서버를 제어 할 수 있기 때문에 서버에서 Rsync가 수신하는 포트를 변경할 수 있지만, 그렇지 않은 경우에만 유용합니다. 해당 포트에서 FTP를 사용하려고합니다.


2

작업을 자동화하려면 위의 사람들이 게시 한 것처럼 스크립트를 만들 때 lftp를 사용하십시오. 일회성 솔루션을 찾고 있다면 (예를 들어 전체 웹 사이트를 다운로드 해야하는 경우) 원하는대로 쉽게 스크립트를 작성할 수 있습니다 ftp를 통해 / 다른 서버로 옮김) ncftp를 사용하십시오. 아직 설치하지 않은 경우 설치하십시오.

apt-get install ncftp

또는

yum install ncftp

(미안한 데비안 / 레드햇 기반 배포판 ..)

일단 설치되면 터미널에서 ncftp를 열고 다음을 입력하십시오.

open -u ftpusername ftp.thedomain.com

암호를 묻고 입력 한 후 :

get -R /home/remotewebsite/public_html/ /home/localwebsite/public_html/

나머지는 당신을 위해 일할 것입니다 .. 행운을 빈다




0

나는 그것을 위해 자체 명령 줄 도구를 만들었습니다 : ftpsync

왜? 단순하고 우아하기 때문에 다른 도구에는 많은 종속성이 필요하며 때로는 컴파일하거나 작동하지 않을 수도 있습니다 (예 : MacOs High Sierra의 lftp). Ftpsync는 순수 Python으로 작성되었으며 타사 라이브러리가 필요 없으며 크기가 작으므로 프로젝트에 파일을 포함시킬 수 있습니다.

사용법 : 프로젝트 디렉토리로 cd하고 다음을 입력하십시오.

ftpsync user:pass@ftp.address.url/remote/dir --delete

--delete 로컬에 존재하지 않는 원격 파일을 삭제하는 것을 나타냅니다.

동기화하지 않고 raw ftp 명령을 실행하려면 다음을 사용하십시오.

ftpsync -c '...'

파일 전송 및 이름 바꾸기와 같은 간단한 작업에 유용합니다.

ftpsync -c 'PASV; TYPE I; STOR some_file.ext; RNFR some_file.ext; RNTO some_file_renamed.ext'

다른 사람들과 같은 이유로이 문제에 걸려 넘어졌습니다. FTP 프로토콜보다 우수한 동기화 유틸리티가 필요합니다. 귀하의 도구는 좋아 보이지만 원격에서 다운로드하여 로컬과 동기화해야하기 때문에 도구를 사용할 수 없습니다. 이미 다운로드 한 파일을 다운로드하지 않으려 고합니다. 로컬에서는 다운로드 파일을 처리하여 다릅니다. 다음에 FTP 스크립트를 실행할 때는 건너 뛰어야합니다. 현재 솔루션을 찾는 데 어려움을 겪고 있습니다.
anup

예, 실제로는 단방향 동기화입니다.
superdario128

0

rclone 은 ftp 및 클라우드 스토리지 제공 업체 (Amazon S3, Dropbox, Google Drive)를 포함한 많은 다른 프로토콜을 통해 디렉토리 동기화를 수행하는 훌륭한 소프트웨어입니다. 로컬 또는 원격 스토리지의 모든 조합과 동기화 할 수 있습니다.

ftp리모콘 을 설정 하려면 다음 지침을 따르십시오 .

이 작업이 완료되면 동기화 작업은 다음과 같습니다.

rclone sync /home/dir FTP_REMOTE:/home --progress 

-7

sftp를 설치 하면 rsync를 사용할 수 있습니다.

나는 다음 중 하나를 사용합니다.

rsync --delete --times --recursive --perms --owner --group --verbose --progress --stats -e ssh root@192.168.0.100:/folder1/ /folder2/

7
없습니다 (적어도 그게 기본 설정에서하는 기능) 아마 SSH 내부의 SFTP를 서브 시스템을 사용하여 FTP
serverhorror

csync (sftp)와 rsync는 같은 방식으로 작동합니다
Rajat
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.