Můžete použít xargs
nebo přesně tento požadavek. Můžete použít -I
jako zástupný symbol pro vstup přijatý z potrubí, do
echo "myserver:${HOME}/dir/2/" | xargs -I {} rsync -r "{}" /local/path/
(nebo) použijte ~
bez uvozovek, pod kterými se nerozšíří na HOME
cesta k adresáři.
echo myserver:~/dir/2/ | xargs -I {} rsync -r "{}" /local/path/
Toto
rsync -r "$(echo myserver:~/dir/2/)" /local/path/
je nejjednodušší způsob, jak to udělat.
Potrubí spojuje stdouts s stdins. Zde chcete, aby výstup šel do argumentu, takže potřebujete něco jiného než klasické potrubí.
To něco je náhrada příkazů ($()
).
Můžete dát rsync
seznam souborů ke stažení v souboru nebo na standardním vstupu pomocí --files-from
:
echo "dir/2/" | rsync --files-from=- -r [email protected]: /local/path/
-
dělá rsync
číst ze standardního vstupu. Server nemůže být přidělen rsync
tímto způsobem. K serveru bude vytvořeno pouze jedno připojení a všechny soubory budou přeneseny přes toto připojení.
Pokud použijete -a
nebo --archive
s --files-from
pak musíte explicitně přidat -r
nebo --recursive
pokud chcete provést rekurzi od této možnosti, i když je součástí -a
, je zakázáno, když je --files-from
se používá.