OSX SSH rsync - Mantenha o diretório remoto atualizado


11

Eu venho principalmente de um plano de fundo do Windows, migrando para o Mac. Eu usei o WinSCP e adorei um recurso chamado "Manter o diretório remoto atualizado" .

Aqui está a pergunta: existe um cliente SCP equivalente para OSX que monitora um diretório em busca de alterações e carrega quando detectado? Eu não me importo se é um cliente GUI ou via linha de comando (rsync, ssh, etc).

Respostas:



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

A segunda linha é executada run_rsyncuma vez incondicionalmente e depois - em cada alteração no diretório atual (ou especifique o caminho exato em vez de .)

Você precisará fswatch- aqui está como instalar via brew :

brew install fswatch

Opções de Rsync:

  • -a - significa "arquivar" e sincroniza recursivamente e preserva links simbólicos, arquivos especiais e de dispositivo, tempos de modificação, grupo, proprietário e permissões.
  • -z - compressão
  • -P - combina as bandeiras --progress e --partial. O primeiro deles fornece uma barra de progresso para as transferências e o segundo permite retomar as transferências interrompidas
  • --exclude - exclui arquivos por padrão

Você tinha me realmente confuso por um tempo porque syncé um utilitário de sistema (pelo menos em cada * nix eu vi; não tem certeza sobre OSX, mas não vejo nenhuma reaosn por que ele não estaria lá). Você pode dar um nome diferente ao seu snippet. Além disso, isso não passa por SSH, que o OP queria; simplesmente passar -e sshpara o rsync deve corrigir isso.
um CVn

@ MichaelKjörling: +1: fixo, obrigado pelo aviso!
Daniel

Eu não entendo suas exclusões, você poderia explicar isso?
peedee 16/07/19

1

Você pode usar o launchd em vez de ações da pasta (para obter um código de exemplo apenas no google para: launchd folder watcher).

Você pode então combinar o item do watchd folder do launchd com um script scp semelhante a este .

Ou use rsync sobre ssh da seguinte maneira:

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

Para uma solução comercial de software multiplataforma, consulte GoodSync .


0

Confira Transmit by Panic. De um dos posts do blog , um comentarista disse:

Um dos meus recursos favoritos, que algumas pessoas talvez não conheçam, quando você abre um documento em um determinado aplicativo no Transmit (digamos, um arquivo .html no BBEdit), edita o documento e salve-o; A transmissão o envia automaticamente de volta ao servidor para o mesmo arquivo, sem perguntas. Ele faz maravilhas ao criar sites e editar CSS. Também é conveniente fazer pequenas correções nas imagens através do Photoshop. Você também pode controlar como o Transmit lida com determinadas extensões de arquivo por meio das Prefs.


Analisei o Transmit - infelizmente ele não suporta SCP - apenas conexões SFTP. Além disso, o Transmit se recusa a abrir meus arquivos de chave privada.
Pygorex1

Esse recurso é algo diferente. Significa apenas que você pode editar arquivos diretamente do servidor remoto usando o editor de sua escolha. Outros programas de FTP também suportam isso.
Daniel Beck

0

Encontrei um script ruby ​​que faz o que você precisa, mas será necessário um pouco de adaptação.

Descrição:
rsync sempre que o diretório em que o script estiver alterado, usando a API do OS X FSEvents https://gist.github.com/149491


0

Bem, eu tive o mesmo tipo de problema e é possível usá-los juntos: rsync, SSH Login sem senha, Watchdog (um utilitário de sincronização Python) e Terminal Notifier (um utilitário de notificação do OS X feito com Ruby. Não é necessário, mas ajuda a saber quando a sincronização terminar).

  1. Eu criei a chave do Login sem senha usando este tutorial da wiki do Dreamhost: http://cl.ly/MIw5

    1.1 Quando terminar, teste se está tudo bem ... se você não puder fazer o Login sem senha, talvez seja necessário tentar afp mount. O Dreamhost (onde está o meu site) não permite montagem AFP, mas permite Login sem senha. No terminal, digite:

    ssh username@host.com Você deve fazer login sem que as senhas sejam solicitadas: P

  2. Instalei o Notificador de Terminal na página do Github: http://cl.ly/MJ5x

    2.1 Eu usei o comando instalador Gem. No Terminal, digite:

    gem install terminal-notifier

    2.3 Teste se a notificação funciona. No Terminal, digite:

    terminal-notifier -message "Starting sync"

  3. Crie um script sh para testar a notificação do rsync +. Salve-o onde quiser, com o nome que desejar. Neste exemplo, chamarei ~ / Scripts / sync.sh Eu usei a extensão ".sh, mas não sei se é necessário.

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

    3.1 Lembre-se de dar permissão de execução para este script sh. No Terminal, digite:

    sudo chmod 777 ~/Scripts/sync.sh 3.2 Execute o script e verifique se as mensagens são exibidas corretamente e se o rsync realmente sincroniza sua pasta local com a pasta remota.

  4. Por fim, baixei e instalei o Watchdog na página do Github: http://cl.ly/MJfb

    4.1 Primeiro, instalei a dependência libyaml usando o Brew (há muita ajuda em como instalar o Brew - como uma "aptidão" para o OS X). No Terminal, digite:

    brew install libyaml

    4.2 Então, usei o "comando easy_install". Vá para a pasta Watchdog e digite Terminal:

    easy_install watchdog

  5. Agora, tudo está instalado! Vá para a pasta que você deseja sincronizar , altere esse código de acordo com suas necessidades e digite Terminal:

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

    Tem que ser EXATAMENTE dessa maneira, com as barras e as quebras de linha, para que você precise copiar essas linhas para um editor de texto, alterar o script, colar no terminal e pressionar return.

    Eu tentei sem as quebras de linha e não funciona!

    No meu Mac, sempre recebo um erro, mas parece não afetar nada:

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

    Agora, faça algumas alterações em um arquivo dentro da pasta e assista a mágica!

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.