Especifique a posição de saída do tubo

4

Eu quero fazer coisas assim:

echo myserver:~/dir/2/ | rsync -r HERE /local/path/

Eu quero a saída redirecionada para um local especificado no comando. O material do eco vai "AQUI". Qual é a maneira mais fácil de fazer isso?

    
por Lumify 21.10.2017 / 09:39

3 respostas

4

Você pode usar xargs ou exatamente esse requisito. Você pode usar o -I como marcador para a entrada recebida do pipeline, fazer

echo "myserver:${HOME}/dir/2/" | xargs -I {} rsync -r "{}" /local/path/

(ou) use ~ sem aspas nos quais não se expande para o caminho do diretório HOME .

echo myserver:~/dir/2/ | xargs -I {} rsync -r "{}" /local/path/
    
por 21.10.2017 / 09:42
7

Isso

 rsync -r "$(echo myserver:~/dir/2/)" /local/path/

é a maneira mais fácil de fazer isso.

Tubulação conecta stdouts com stdins. Aqui você quer que a saída vá para um argumento, então você precisa de algo além da tubulação clássica.

Esse algo é substituição de comandos ( $() ).

    
por 21.10.2017 / 10:52
2

Você pode fornecer rsync uma lista de arquivos para download em um arquivo ou em uma entrada padrão usando --files-from :

echo "dir/2/" | rsync --files-from=- -r user@server: /local/path/

O - faz rsync ler a entrada padrão. O servidor não pode ser atribuído a rsync dessa maneira. Haverá apenas uma única conexão feita com o servidor e todos os arquivos serão transferidos através dessa conexão.

Se você usar -a ou --archive com --files-from , precisará adicionar explicitamente -r ou --recursive se desejar recursão, já que essa opção, mesmo que faça parte de -a , está desabilitada quando --files-from é usado.

    
por 21.10.2017 / 10:46

Tags