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.