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.