OSX SSH rsync-원격 디렉토리를 최신 상태로 유지


11

나는 주로 Windows 배경에서 왔으며 Mac으로 마이그레이션했습니다. WinSCP를 사용했으며 "원격 디렉토리를 최신 상태로 유지" 라는 기능을 좋아했습니다 .

질문은 다음과 같습니다. OSX 용 SCP 클라이언트가 디렉토리의 변경 사항을 모니터링하고 감지되면 업로드 할 수 있습니까? GUI 클라이언트인지 명령 줄 (rsync, ssh 등)을 사용하든 상관 없습니다.

답변:



12
alias run_rsync='rsync -azP --exclude ".*/" --exclude ".*" --exclude "tmp/" /source_folder username@host:/destination_folder'
run_rsync; fswatch -o . | while read f; do run_rsync; done

두 번째 줄은 run_rsync무조건 한 번 실행 된 다음 현재 디렉토리에서 변경 될 때마다 실행됩니다 (또는 대신 정확한 경로 지정 .).

당신이 필요합니다 fswatch여기를 통해 설치하는 방법입니다 - 양조 :

brew install fswatch

재 동기화 옵션 :

  • -a- "아카이브"를 나타내며 재귀 적으로 동기화되며 심볼릭 링크, 특수 및 장치 파일, 수정 시간, 그룹, 소유자 및 권한을 유지합니다.
  • -z-압축
  • -P---progress 및 --partial 플래그를 결합합니다. 이 중 첫 번째는 전송 진행률 표시 줄을 제공하고 두 번째는 중단 된 전송을 재개 할 수 있습니다.
  • --exclude-패턴별로 파일을 제외합니다

당신은 나를 가지고 정말 때문에 잠시 동안 혼란 sync(그것은있을 수없는 이유하지 않도록 OSX에 대한,하지만 reaosn을 볼 수 없습니다 내가 본 모든 * nix에서 스크립트에 적어도) 시스템 유틸리티입니다. 훔친 다른 이름을 지정할 수 있습니다. 또한 이것은 OP가 원했던 SSH를 거치지 않습니다. 단순히 -e sshrsync로 전달 하면 문제가 해결됩니다.
— CVn

@ MichaelKjörling : +1 : 고정, 고맙습니다!
— Daniel

나는 당신의 배제를 이해하지 못합니다. 설명해 주시겠습니까?
— peedee

1

폴더 작업 대신 launchd를 사용할 수 있습니다 (시작된 폴더 감시자에 대한 Google의 샘플 코드를 얻으려면).

당신은 다음과 같은 SCP 스크립트 감시자 항목을 폴더 launchd에 결합 할 수 이것 .

또는 다음과 같이 ssh를 통해 rsync를 사용하십시오.

rsync -urltv --delete -e ssh /path/to/dir othermachine:/path/to/dir

상용 크로스 플랫폼 소프트웨어 솔루션은 GoodSync를 참조하십시오 .


0

패닉으로 전송 을 확인하십시오 . 에서 자신의 블로그 게시물 중 하나 하는 주석 말했다 :

내가 좋아하는 기능 중 일부는 사람들이 알지 못할 수도 있습니다. 전송에서 특정 응용 프로그램으로 문서를 열면 (.html 파일을 BBEdit이라고 가정) 문서를 편집하고 저장하십시오. 전송은 질문없이 자동으로 서버에 동일한 파일로 다시 업로드합니다. 웹 사이트를 만들고 CSS를 편집 할 때 궁금합니다. 또한 Photoshop을 통해 이미지를 약간 수정하는 것이 편리합니다. Prefs를 통해 전송이 특정 파일 확장자를 처리하는 방법도 처리 할 수 ​​있습니다.


전송을 보았습니다-불행히도 SCP를 지원하지 않고 SFTP 연결 만 지원합니다. 또한 전송은 개인 키 파일을 열지 않습니다.
— pygorex1 2012 년

이 기능은 다릅니다. 선택한 편집기를 사용하여 원격 서버에서 파일을 직접 편집 할 수 있다는 의미입니다. 다른 FTP 프로그램도이를 지원합니다.
— Daniel Beck


0

글쎄, 나는 같은 종류의 문제가 있었고 rsync, SSH Passwordless Login, Watchdog (Python 동기화 유틸리티) 및 Terminal Notifier (Ruby로 만든 OS X 알림 유틸리티)를 함께 사용할 수 있습니다. 필요하지는 않지만 도움이됩니다. 동기화가 완료되면).

  1. Dreamhost Wiki의이 자습서를 사용하여 비밀번호없는 로그인 키를 작성했습니다. http://cl.ly/MIw5

    1.1. 완료하면 모든 것이 정상인지 테스트하십시오. 암호가없는 로그인을 할 수 없다면 afp 마운트를 시도해야합니다. Dreamhost (내 사이트가있는 곳)에서는 afp 마운트를 허용하지 않지만 암호없는 로그인은 허용합니다. 터미널에 다음을 입력하십시오.

    ssh username@host.com 비밀번호를 묻지 않고 로그인해야합니다 : P

  2. Github 페이지에서 터미널 알리미를 설치했습니다 : http://cl.ly/MJ5x

    2.1. Gem installer 명령을 사용했습니다. 터미널에 다음을 입력하십시오.

    gem install terminal-notifier

    2.3. 알림이 작동하는지 테스트하십시오. 터미널에 다음을 입력하십시오.

    terminal-notifier -message "Starting sync"

  3. rsync + 알림을 테스트하는 sh 스크립트를 작성하십시오. 원하는 이름으로 원하는 곳에 저장하십시오. 이 예제에서는 ~ / Scripts / sync.sh 라고 부르 겠습니다. ".sh 확장자를 사용했지만 필요한지 모르겠습니다.

    #!/bin/bash terminal-notifier -message "Starting sync" rsync -azP ~/Sites/folder/ user@host.com:site_folder/ terminal-notifier -message "Sync has finished"

    3.1. 이 sh 스크립트에 실행 권한을 부여하십시오. 터미널에 다음을 입력하십시오.

    sudo chmod 777 ~/Scripts/sync.sh 3.2. 스크립트를 실행하고 메시지가 올바르게 표시되고 rsync가 실제로 로컬 폴더를 원격 폴더와 동기화하는지 확인하십시오.

  4. 마지막으로 Github 페이지에서 Watchdog을 다운로드하여 설치했습니다 : http://cl.ly/MJfb

    4.1. 먼저, Brew를 사용하여 libyaml 의존성을 설치했습니다. 터미널에 다음을 입력하십시오.

    brew install libyaml

    4.2. 그런 다음 "easy_install 명령"을 사용했습니다. Watchdog 폴더로 이동하여 터미널에 입력하십시오.

    easy_install watchdog

  5. 이제 모든 것이 설치되었습니다! 당신이 동기화 할 폴더를 이동 , 여러분의 필요에이 코드를 변경 , 터미널에 입력 :

      watchmedo shell-command
          --patterns="*.php;*.txt;*.js;*.css" \
          --recursive \
          --command='~/Scripts/Sync.sh' \
          .
    

    그것은이어야 정확히 당신이 텍스트 편집기에 다음 줄을 복사 할 수있는 스크립트를 변경, 터미널 및 Enter 키를 눌러 붙여 넣기거야 그래서, 슬래시 및 줄 바꿈으로, 이런 식으로.

    줄 바꿈없이 시도했지만 작동하지 않습니다!

    내 Mac에서는 항상 오류가 발생하지만 아무런 영향을 미치지 않는 것 같습니다.

    /Library/Python/2.7/site-packages/argh-0.22.0-py2.7.egg/argh/completion.py:84: UserWarning: Bash completion not available. Install argcomplete.

    이제 폴더 안의 파일을 변경하고 마법을 지켜보십시오!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.