Atualmente, eu só faço RSync Directories
como:
* * * * * rsync -avz /var/www/public_html/images root@<remote-ip>:/var/www/public_html
Então, como faço para rsync
um único arquivo, como /var/www/public_html/.htaccess
?
Respostas:
Você faz isso da mesma forma que faria com um diretório, mas especifica o caminho completo para o nome do arquivo como a fonte. No seu exemplo:
rsync -avz --progress /var/www/public_html/.htaccess root@<remote-ip>:/var/www/public_html/
Sintaxe básica
rsync options source destination
Exemplo
rsync -az /var/www/public_html/filename root@<remote-ip>:/var/www/public_html
A resposta de Michael Place funciona muito bem se, em relação ao diretório raiz da origem e do destino, todos os diretórios no caminho do arquivo já existem.
Mas e se você quiser sincronizar um arquivo com este caminho de origem:
/ source-root / a / b / arquivo
para um arquivo com o seguinte caminho de destino:
/ target-root / a / b / arquivo
e os diretórios um e b não existe?
Você precisa executar um comando rsync como o seguinte:
rsync -r --include="/a/" --include="/a/b/" --include="/a/b/file" --exclude="*" [source] [target]
Até agora, duas das respostas não estão certas, eles obterão mais de um arquivo, e o outro não é tão simples quanto poderia ser, aqui está uma resposta mais simples IMO.
O seguinte obtém exatamente um arquivo, mas você deve criar o diretório dest com mkdir. Esta é provavelmente a opção mais rápida:
mkdir -p ./local/path/to/file
rsync user@remote:/remote/path/to/file/ -zarv --include "filename" --exclude "*" ./local/path/to/file/
Se houver apenas uma instância do arquivo em / remote / path, o rsync pode criar diretórios para você se você fizer o seguinte. Isso provavelmente levará um pouco mais de tempo porque pesquisa mais diretórios. Além disso, criará diretórios vazios para diretórios em / remote / path que não estão em ./local
cd ./local
rsync user@remote:/remote/path -zarv --include "*/" --include "filename" --exclude "*" .
Tenha em mente que a ordem de --include e --exclude é importante.