Tendo argumentos de linha $ passados ao rsync ao usar a opção --protect-args

2

Eu tenho um script e este bloco de código -

cat file_list.txt | while read line
do
rsync --dry-run -avzPs '$line' '123.456.122.111:$line'
done

O file_list.txt se parece com isso -

/some/random/directory/file_name.txt
/some/other/directory/a file name.html
.....

O problema que tenho é que o comando rsync não funcionará com o argumento $line , devido a como --protect-args funciona. Eu preciso ter essa opção dentro do comando porque alguns dos nomes de arquivos têm espaços neles.

No entanto, não posso usar apenas um caractere curinga e passar tudo, pois o documento de texto contém todos os caminhos e arquivos específicos que desejo transmitir. Como posso resolver isso?

    
por user210184 13.01.2017 / 01:22

2 respostas

2

Por que não usar --files-from= para especificar os arquivos?

rsync -avzP --files-from=file_list.txt 123.456.122.111:

Você também pode adicionar --no-relative se quiser todos os arquivos no mesmo diretório sem o caminho completo.

    
por 13.01.2017 / 02:33
1

Você não pode usar aspas simples colocando os nomes das variáveis. Strings com aspas simples não são avaliadas.

Seu script deve ser:

cat file_list.txt | while read line
do
    rsync --dry-run -avzPs "$line" "123.456.122.111:$line"
done
    
por 13.01.2017 / 02:25