Vous pouvez utiliser xargs
ou exactement cette exigence. Vous pouvez utiliser le -I
comme espace réservé pour l'entrée reçue du pipeline, faites
echo "myserver:${HOME}/dir/2/" | xargs -I {} rsync -r "{}" /local/path/
(ou) utilisez ~
sans guillemets sous lesquels il ne se développe pas jusqu'au HOME
chemin du répertoire.
echo myserver:~/dir/2/ | xargs -I {} rsync -r "{}" /local/path/
Ceci
rsync -r "$(echo myserver:~/dir/2/)" /local/path/
est le moyen le plus simple de le faire.
La tuyauterie connecte les stdouts aux stdins. Ici, vous voulez que la sortie aille vers un argument, vous avez donc besoin d'autre chose que de la tuyauterie classique.
Ce quelque chose est une substitution de commande ($()
).
Vous pouvez donner rsync
une liste de fichiers à télécharger dans un fichier ou sur l'entrée standard en utilisant --files-from
:
echo "dir/2/" | rsync --files-from=- -r example@unixlinux.online: /local/path/
Le -
fait rsync
lire à partir de l'entrée standard. Le serveur ne peut pas être attribué à rsync
de cette façon. Il n'y aura qu'une seule connexion établie avec le serveur et tous les fichiers seront transférés via cette connexion.
Si vous utilisez -a
ou --archive
avec --files-from
alors vous devez ajouter explicitement -r
ou --recursive
si vous voulez la récursivité depuis cette option, même si elle fait partie de -a
, est désactivé lorsque --files-from
est utilisé.