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.