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 [email protected]: /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.