Puoi usare xargs o esattamente questo requisito. Puoi usare il -I come segnaposto per l'input ricevuto dalla pipeline, do
echo "myserver:${HOME}/dir/2/" | xargs -I {} rsync -r "{}" /local/path/
(o) usa ~ senza virgolette doppie sotto le quali non si espande al HOME percorso della directory.
echo myserver:~/dir/2/ | xargs -I {} rsync -r "{}" /local/path/
Questo
rsync -r "$(echo myserver:~/dir/2/)" /local/path/
è il modo più semplice per farlo.
Il piping collega gli stdout con gli stdin. Qui vuoi che l'output vada a un argomento, quindi hai bisogno di qualcos'altro rispetto al piping classico.
Quel qualcosa è la sostituzione dei comandi ($() ).
Puoi dare rsync un elenco di file da scaricare in un file o su input standard utilizzando --files-from :
echo "dir/2/" | rsync --files-from=- -r [email protected]: /local/path/
Il - rende rsync letto dall'input standard. Il server non può essere assegnato a rsync in questo modo. Verrà effettuata una sola connessione al server e tutti i file verranno trasferiti tramite quella connessione.
Se usi -a o --archive con --files-from quindi devi aggiungere esplicitamente -r o --recursive se vuoi la ricorsione da quell'opzione, anche se fa parte di -a , è disabilitato quando --files-from viene utilizzato.