Erro ao tentar copiar o conteúdo do diretório com o rsync dentro de um script de shell

1

Eu quero copiar o conteúdo de "src/main/resources/" para meus servidores remotos. Esta pasta contém vários arquivos *properties .

O seguinte comando é executado sem nenhum problema no bash e zsh:

rsync -av "src/main/resources/*" "[email protected]:/home/azureuser"

No entanto, ao executar tal comando dentro de um script de shell, estou recebendo o seguinte erro. Eu acho que é devido à expansão * no shell.

rsync: link_stat "/home/marcos/Desenvolvimento/Java/EXT-Hyuga/src/main/resources/*" failed: No such file or directory (2)

Como posso corrigir esse problema?

Conteúdo do script da shell:

#!/bin/bash

# server array
declare -a deployinstances=("s1" "s2" "s3" "s4")

## looping trough deploy instances
for di in "${deployinstances[@]}"
do
   rsync -av "src/main/resources/*" "azureuser@$di.cloudapp.net:/home/azureuser"
done
    
por Marcos Roriz Junior 08.04.2016 / 23:21

1 resposta

1

Seu primeiro comando, o que você executou diretamente na linha de comando, também não funcionará.

Em bash (e todos os outros shells), a geração de nome de arquivo (expansão de nome de caminho ou expansão glob AKA) não ocorrerá quando os tokens (por exemplo, * , ? , [] ) forem colocados entre aspas ( duplo e único), como a remoção de cotas é feita por shell após a expansão do nome do caminho para qualquer palavra, então a palavra é tratada literalmente então.

Então você precisa manter * fora das citações:

rsync -av src/main/resources/* azureuser@"$di".cloudapp.net:/home/azureuser/

Eu não usei nenhuma aspas aqui em nenhum nome de caminho, porque, a menos que você tenha espaços no caminho, não precisa de aspas ao redor de um caminho.

    
por heemayl 08.04.2016 / 23:41