유닉스 :
다음 cmd 줄이 제대로 작동합니다.
rsync -avr -e ssh /home/dir user@example.com:/home/
그러나 FTP 서버 만있는 원격 서버로 rsync하도록 지금 설정해야합니다. 어떻게하면 되나요?
나는 rsync 도움말을 보았지만 빨리 잃어 버렸습니다 (이 일을 자주하지는 않습니다).
유닉스 :
다음 cmd 줄이 제대로 작동합니다.
rsync -avr -e ssh /home/dir user@example.com:/home/
그러나 FTP 서버 만있는 원격 서버로 rsync하도록 지금 설정해야합니다. 어떻게하면 되나요?
나는 rsync 도움말을 보았지만 빨리 잃어 버렸습니다 (이 일을 자주하지는 않습니다).
답변:
당신은하지 않습니다. rsync는 당신을 위해 그것을 할 수 없으며, 그것은 자체 프로토콜이며 FTP를 통해 작동하지 않습니다.
그러나 csync 시도 할 수 있습니다 . IIRC는 HTTP를 통해 rsync와 유사한 동작을 제공합니다. FTP를 통해 작동하는지에 대해서는 언급 할 수 없으므로 시도해야합니다.
다른 사람들이 언급 한 이유로 rsync 가 작동하지 않습니다. 그러나 lftp 와 ncftp 에는 모두 필요에 맞는 "미러"모드가 있습니다.
나는 이것을 사용하여 로컬 디렉토리에서 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"
wput
는 내장 대역폭 제한이 있습니다.
쓴 것처럼 이젤 , 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 명령이 실패하므로 파일 트리 삭제를 포함한 조작이 잘못된 디렉토리 (루트)에서 발생합니다!
--delete
defaut에 의해 옵션이 비활성화 되도록 스크립트를 업데이트 했습니다.를 주석 해제하여 활성화하십시오 DELETE= command
.
cd $RCD
a-ty-with-a-popo가 실수로 잘못된 디렉토리에서 파일을 삭제하지 못하도록 하기 전에이 작업을 수행합니다 set cmd:fail-exit yes
. ( lftp
다음 명령을 실행할 때까지 실제로 종료 된 것으로 보이지 는 않습니다.) — cd $LCD
이 작업을 수행 하기 전에 (로컬 쉘에서, 즉 스크립의 맨 위에) : set -eu
.
mirror
하여, 그리고 --delete
: D 파일을 잘못된 디렉토리에서. (그러나 나는 다시 그들을 복사, 그래서 그것은 중요하지 않았다 경우에 아마 다른 사람을 위해 중요하다..)
실제로 수행하려는 작업에 따라 완전히 다른 또 다른 방법을 사용 curlftps
하여 ftp 폴더를 마운트 한 다음 rsync
두 개의 "로컬"폴더 를 마운트 할 수 있습니다 .
배포판에 따라 설치가 다르므로 일반화 할 수는 없지만 설치 fuse
하고 curlftpfs
( fuse
기본적으로 데비안이 기본적으로 이미 설치되어 있음) 다음을 수행하십시오.
sudo apt-get install curlftpfs
fuse
모듈이로드 되었는지 확인하십시오 ( modprobe fuse
)
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
이 경우 퓨즈 모듈을 먼저로드해야합니다.
그러나 두 가지 사항에 대해 조언하십시오.
curlftpfs
가 포함되어 있으면 실패 할 수 있습니다 (을 사용하여 무언가를 수행 할 수 있음 .netrc
).umount DIR
경우 DIR
귀하이었다 /path/to/ftp/folder
위.
이 weex은 ...
Weex는 웹 페이지 또는 다른 FTP 아카이브를 원격으로 유지 관리하는 작업을 자동화하도록 설계된 유틸리티입니다. 필요에 따라 업로드 및 원격 삭제를 수행하여 로컬 파일 세트를 원격 서버에 동기화합니다.
$ weex yourFTPconfigName
여기 수동 linuxcertif.com/man/1/weex
이것은 좋고 무료로 맞는 것 같습니다 : https://savannah.gnu.org/projects/ftpsync/
curlftpfs를 사용하여 ftp를 마운트하고 http://linux.die.net/man/1/curlftpfs 이후에 rsync를 사용할 수 있습니다
Jonas S의 솔루션은 상황에 따라 유용 할 수 있습니다. 예를 들어 다운로드 속도가 빠르고 업로드 속도가 느린 경우 서버에서 파일을 확인하는 것이 불필요하게 파일을 업로드하는 것보다 비교적 빠를 수 있습니다.
CurlFTPFS를 사용하고 싶을 수도 있습니다. http://packages.ubuntu.com/search?suite=default§ion=all&arch=any&searchon=names&keywords=curlftpfs
일반적으로 rsync 대신 일반 FTP 클라이언트를 사용하는 것이 좋습니다.
작업을 자동화하려면 위의 사람들이 게시 한 것처럼 스크립트를 만들 때 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/
나머지는 당신을 위해 일할 것입니다 .. 행운을 빈다
"sitecopy"또는 "mirror"를 사용하면 많은 대역폭을 절약 할 수 있습니다.
둘 다 효율적인 증분 업데이트를 처리합니다.
wput도 있습니다 :
wput --timestamping --reupload --dont-continue source-files ftp://target.host/dir
~ / .netrc에서 사용자 이름과 비밀번호를 읽습니다. 그렇지 않으면 보안에 특별히 관심이 없다면 ftp : // username : password@target.host 로 제공 할 수 있습니다 .
나는 그것을 위해 자체 명령 줄 도구를 만들었습니다 : 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'
sftp를 설치 하면 rsync를 사용할 수 있습니다.
나는 다음 중 하나를 사용합니다.
rsync --delete --times --recursive --perms --owner --group --verbose --progress --stats -e ssh root@192.168.0.100:/folder1/ /folder2/