Sie können xargs verwenden oder genau diese Anforderung. Sie können die -I verwenden als Platzhalter für die von der Pipeline erhaltene Eingabe do
echo "myserver:${HOME}/dir/2/" | xargs -I {} rsync -r "{}" /local/path/
(oder) verwenden Sie ~ ohne doppelte Anführungszeichen, unter denen es nicht zu HOME erweitert wird Verzeichnispfad.
echo myserver:~/dir/2/ | xargs -I {} rsync -r "{}" /local/path/
Dies
rsync -r "$(echo myserver:~/dir/2/)" /local/path/
ist der einfachste Weg, es zu tun.
Piping verbindet stdouts mit stdins. Hier möchten Sie, dass die Ausgabe an ein Argument geht, also brauchen Sie etwas anderes als klassisches Piping.
Dieses Etwas ist Befehlsersetzung ($() ).
Sie können rsync geben eine Liste von Dateien, die in einer Datei oder auf der Standardeingabe mit --files-from heruntergeladen werden sollen :
echo "dir/2/" | rsync --files-from=- -r [email protected]: /local/path/
Die - macht rsync von der Standardeingabe lesen. Der Server kann nicht an rsync übergeben werden auf diese Weise. Es wird nur eine einzige Verbindung zum Server hergestellt und alle Dateien werden über diese Verbindung übertragen.
Wenn Sie -a verwenden oder --archive mit --files-from dann müssen Sie explizit -r hinzufügen oder --recursive wenn Sie seit dieser Option eine Rekursion durchführen möchten, obwohl sie Teil von -a ist , ist deaktiviert, wenn --files-from verwendet wird.