Puedes usar xargs o exactamente este requisito. Puedes usar el -I como marcador de posición para la entrada recibida de la canalización, haz
echo "myserver:${HOME}/dir/2/" | xargs -I {} rsync -r "{}" /local/path/
(o) usa ~ sin comillas dobles bajo las cuales no se expande al HOME ruta del directorio.
echo myserver:~/dir/2/ | xargs -I {} rsync -r "{}" /local/path/
esto
rsync -r "$(echo myserver:~/dir/2/)" /local/path/
es la forma más fácil de hacerlo.
Las tuberías conectan las salidas estándar con las entradas estándar. Aquí desea que la salida vaya a un argumento, por lo que necesita algo más que las tuberías clásicas.
Ese algo es sustitución de comandos ($() ).
Puedes dar rsync una lista de archivos para descargar en un archivo o en la entrada estándar usando --files-from :
echo "dir/2/" | rsync --files-from=- -r example@unixlinux.online: /local/path/
El - hace rsync leer desde la entrada estándar. El servidor no se puede dar a rsync de esta forma. Solo se realizará una única conexión al servidor y todos los archivos se transferirán a través de esa conexión.
Si usa -a o --archive con --files-from entonces necesitas agregar explícitamente -r o --recursive si desea recurrir a esa opción, aunque sea parte de -a , está deshabilitado cuando --files-from se utiliza.