Use o rsync para copiar automaticamente um arquivo para outra pasta


5

Eu encontrei este comando para copiar o conteúdo da fonte para uma pasta de destino.

rsync -r source/* destination

O que eu realmente gostaria de ter este comando é executado automaticamente cada vez que um arquivo é adicionado à minha pasta de origem.

Isso é possível?


Você poderia usar um script que combina rsynce inotifycomo este
Bert

Respostas:


6

Você pode usar as ações do Automator e da Pasta para assistir a pasta e executar o script.

Ao iniciar o Automator e escolher Novo, uma das opções dadas é criar uma 'Ação de Pasta'. Na parte superior da tela, depois de selecionar Ação da pasta, você tem a opção de escolher uma pasta para "assistir".

insira a descrição da imagem aqui

O que eu acho que você gostaria de fazer no seu caso é selecionar 'Utilities' na coluna mais à esquerda e, em seguida, arraste 'Run Shell Script' da segunda coluna para a janela do fluxo de trabalho.

insira a descrição da imagem aqui

Aqui é onde você iria escrever o script que você gostaria de executar quando as alterações são feitas para a pasta. Nesse caso, seu script rsync.

insira a descrição da imagem aqui


Essa é uma ótima resposta que beneficiaria se alguns dos conteúdos por trás desse link fossem soletrados no post.
Ian C.

Mais detalhes adicionados.
StephenCollins

3

Uma solução rápida e suja para essa questão, que é portátil em plataformas UNIX (não específicas do OSX, mas pode ser usada em HP-UX, Solaris, Linux, etc.) é chamar rsync do crontab do usuário e permitir a sincronização de pastas do rsync própria lógica determina se a pasta foi alterada ou não. Um refinamento no uso dessa solução portátil é encapsular a chamada para rsync com um teste de data entre um arquivo tocado (na verdade, seu horário de modificação) e a hora da modificação da pasta a ser sincronizada, mas isso não é necessário, a menos que Sincronizadas são muito grandes (profundas e / ou largas). Uma única pasta com várias subpastas é ideal para esta solução.

Uma entrada para o crontab que executará o caso "rápido e sujo" em um intervalo de pesquisa minucioso é:

# run sync every minute:
* * * * * /usr/bin/rsync -avz $HOME/source_path $HOME/target/path 1>> $HOME/.my_sync.log 2>&1

Isso deve ser feito para o caso rápido e sujo - em outras palavras, as pastas serão mantidas atualizadas dentro de um minuto após a alteração. Verifique o arquivo ~ / .my_sync.log para os status de execução - este arquivo irá crescer sem limites ao longo do tempo, então uma vez que a operação correta tenha sido determinada, altere ">>" para ">" para pelo menos registrar o status mais recente de rsync.

Outro ponteiro é que a opção -z para rsync deve ser usada ao sincronizar através de uma rede. A opção -z fará com que a compactação seja usada para as transferências de arquivos da rede. Ao usar o rsync para sincronizar entre pastas em sistemas de arquivos locais para um servidor, a opção -z geralmente pode ser omitida.

Nota sobre o uso do crontab:

Se você não pode editar seu crontab com:

$ crontab -e

Então você terá que se dar permissão para ter um crontab. Veja a página de manual para crontab. No OSX, isso é o que precisa ser feito - a mudança é um pouco diferente nos sistemas linux: Em poucas palavras, certifique-se de que seu ID de usuário esteja em /usr/lib/cron/cron.allow ou que / usr / lib / cron / cron.allow não existe. Além disso, verifique se o seu ID de usuário não está em /usr/lib/cron/cron.deny.


1

A ferramenta que eu usaria para monitorar suas pastas é Hazel . Seria excelente lançar o script e você pode acabar usando-o para muitas mais pastas ao longo do tempo enquanto pensa em coisas que você poderia automatizar.

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.