Eu gostaria rsync
do computador local para o servidor. Em um diretório que não existe, e eu quero rsync
criar esse diretório no servidor primeiro.
Como eu posso fazer isso?
Se você tiver mais do que o último diretório folha a ser criado, poderá executar um ssh ... mkdir -p
primeiro separado ou usar o --rsync-path
truque, conforme explicado aqui :
rsync -a --rsync-path="mkdir -p /tmp/x/y/z/ && rsync" $source user@remote:/tmp/x/y/z/
Ou use a --relative
opção sugerida por Tony. Nesse caso, você especifica apenas a raiz do destino, que deve existir, e não a estrutura de diretórios da fonte, que será criada:
rsync -a --relative /new/x/y/z/ user@remote:/pre_existing/dir/
Dessa forma, você terminará com / pre_existing / dir / new / x / y / z /
E se você deseja ter "y / z /" criado, mas não dentro de "new / x /", você pode adicionar ./
onde deseja --relative
começar:
rsync -a --relative /new/x/./y/z/ user@remote:/pre_existing/dir/
criaria / pré-existente / dir / y / z /.
mkdir
, por isso estou usando o hack:--rsync-path="echo f > /public/.keep && rsync /public/.keep /public/newfolder/ && rsync" \
ele cria um arquivo extra, mas você pode removê-lo mais tarde.&&
?Supondo que você esteja usando o ssh para conectar o rsync, que tal enviar um comando ssh antes:
se já existe, nada acontece
fonte
rsync
, portanto, nenhuma resposta.ssh
não for suportada e sersync
conectar àrsync daemon
extremidade remota.A
-R, --relative
opção fará isso.Por exemplo: se você deseja fazer backup
/var/named/chroot
e criar a mesma estrutura de diretório no servidor remoto,-R
fará exatamente isso.fonte
/./
o caminho de origem. Veja a página de manual para detalhes.rsync
não criará diretórios automaticamente se as pastas de destino não existirem. Suspiro.--relative
. Pode não fazer o que você pensa.--relative
em conjunto com o/./
que a maioria dos novatos estará procurando.rsync -avz -e ssh --progress --relative ~/./Desktop/ TARGET_IP:~/
copiará o conteúdo da área de trabalho na área de trabalho de destino. Não sei como as diferenças nos nomes de usuários podem afetar isso.isso funcionou para mim:
Eu recebo esta mensagem:
mas não preciso me preocupar em ter um diretório vazio por aí.
fonte
Eu não acho que você pode fazê-lo com um comando rsync, mas você pode 'pré-criar' o diretório extra primeiro assim:
onde 'emptydir' é um diretório vazio local (que você pode ter que criar primeiro como um diretório temporário).
É um pouco complicado, mas funciona para mim.
Felicidades
Chris
fonte
rsync /dev/null node:existing-dir/new-dir/
sugestão acima.Essa resposta usa pedaços de outras respostas, mas espero que seja um pouco mais claro quanto às circunstâncias. Você nunca especificou o que estava sincronizando - uma única entrada de diretório ou vários arquivos.
Então, vamos supor que você esteja movendo uma entrada do diretório de origem e não apenas movendo os arquivos contidos nela.
Digamos que você tenha um diretório chamado localmente
data/myappdata/
e você tenha uma carga de subdiretórios por baixo disso. Você temdata/
na sua máquina alvo, mas nãodata/myappdata/
- isso é fácil:Você pode até usar um nome diferente para o diretório remoto:
Se você está apenas movendo alguns arquivos e não movendo a entrada de diretório que os contém, então você faria:
e criará o
myappdata
diretório para você na máquina remota para colocar seus arquivos. Novamente, odata/
diretório deve existir na máquina remota.Aliás, meu uso de
-rvv
flag é obter resultados duplamente detalhados, para que fique claro o que faz, bem como o comportamento recursivo necessário.Apenas para mostrar o que recebo ao usar o rsync (3.0.9 no Ubuntu 12.04)
Espero que isso esclareça isso um pouco.
fonte
rsync -rvv /path/to/data/myappdata user@host:/remote/path/to/data/myappdata
, mas o que ele criou no alvo é / remote / path / to / data / myappdata / myappdata /rsync -rvv /path/to/data/myappdata/ user@host:/remote/path/to/data/myappdata
por exemplo:
from: /xxx/a/b/c/d/e/1.html
para: usuário @ remoto: /pre_existing/dir/b/c/d/e/1.html
rsync:
cd / xxx / a / && rsync -auvR b / c / d / e / user @ remote: / pré-existente / dir /
fonte