xargs
kann Zeilennummern nicht für Sie interpretieren. Stattdessen sollten Sie etwas verwenden nl
, um Zeilennummern hinzuzufügen:
$ echo -ne "a\nb\nc\n" \ | nl -bt -nln 1 a 2 b 3 c
Dann müssen Sie den Befehl zu formatieren, so dass es durch übergeben werden kann xargs
als Argument an scp
, wie etwas mit sed
:
$ echo -ne "a\nb\nc\n" \ | nl -bt -nln \ | sed -re 's!^([0-9]+) +\t(.+)$!./\1.txt user@\2:/tmp!' ./1.txt user@a:/tmp ./2.txt user@b:/tmp ./3.txt user@c:/tmp
Endlich laufen!
$ echo -ne "a\nb\nc\n" \ | nl -bt -nln \ | sed -re 's!^([0-9]+) +\t(.+)$!./\1.txt user@\2:/tmp!' \ | xargs -P10 -l1 -t scp scp ./1.txt user@a:/tmp scp ./2.txt user@b:/tmp scp ./3.txt user@c:/tmp
Beachten Sie, dass dies eine schlechte Verbindung zwischen dem Host und der übertragenen Datei bietet (dies geschieht nur nach Zeilennummer ...).
nl
-bt
- nummerieren Sie nur nicht leere Zeilen-nln
- Verwenden Sie eine linksbündige Nummerierung ohne führende Nullen
sed
-r
- Verwenden Sie einen erweiterten Regex-e 's!^([0-9]+) +\t(.+)$!./\1.txt user@\2:/tmp!'
- das zu verwendende Skript^([0-9]+) +\t(.+)$
stimmen Sie mit Zahlen ab, gefolgt von Leerzeichen, dann einem Tabulator und einem beliebigen Zeichen\1.txt user@\2:/tmp
- Ersetzung mit Gruppen oben (innen()
)
xargs
-P10
- bis zu 10 Prozesse gleichzeitig ausführen-l1
- Beschränken Sie sichxargs
auf die Verwendung einer Eingabezeile pro Prozess-t
- Drucken Sie die Befehle so, wie sie ausgeführt werden