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 example@unixlinux.online: /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á.