Parallele Wellung mit Dateiname und Dateiname der Ausgabe in der Linux-Shell

695
kurokirasama

Ich lade normalerweise Dateien parallel mit curl und URLs in eine Datei wie diese herunter:

cat links.txt | parallel --will-cite curl --connect-timeout 5 --max-time 10 --retry-max-time 40 --retry 5 --retry-delay 0 -s -f -O -C - 

Wo links.txt eine URL pro Zeile hat.

Jetzt muss ich jeder Datei einen benutzerdefinierten Dateinamen zuweisen und ich kann nicht herausfinden, wie ich diese zweite Eingabe zu curltrough hinzufügen kann parallel. Unter anderem habe ich versucht, -o filenamezu jeder Zeile hinzuzufügen, links.txtaber es hat nicht funktioniert.

Grüße,

1
Zeigen Sie uns, wie Sie das tun würden, wenn Sie 3 "von Hand" machen müssten (dh ohne GNU Parallel). (Und überlegen Sie einmal, `parallel --bibtex` auszuführen). Ole Tange vor 6 Jahren 0
Kopieren und Einfügen einer URL und eines Dateinamens davon: `curl --connect-timeout 5 --max-time 10 --retry-max-time 40 --retry 5 --retry-delay 0 -s -f -C - -o Dateiname1 URL1` kurokirasama vor 6 Jahren 0
Möchten Sie wirklich alle URLs in `filename1` speichern? Ole Tange vor 6 Jahren 0
nop. Kopieren und Einfügen bedeutet `curl ... filename1 url1`,` curl ... filename2 url2 `usw kurokirasama vor 6 Jahren 0

1 Antwort auf die Frage

1
PEdroArthur

Entsprechend man parallelkönnen Sie einige Platzhalter verwenden, um Ihnen zu helfen. Beispielsweise könnten Sie Ihren Code folgendermaßen umschreiben:

parallel curl "$" -o '{#}'.curl_output '{}' :::: links.txt 

Wo $sind alle Ihre Argumente curlund links.txthat eine URL pro Zeile. Mit diesem Befehl rufen Sie die URLs ab links.txtund speichern das Ergebnis in einer Datei, die nach der Nummer des Jobs benannt wird, als curl ausführen (z 10.curl_output. B. ). Sie müssten die Jobnummer mit URLs marschieren.

Ein anderer Ansatz wäre, rief curlmit -o '{}'._curl_output. In diesem Fall müssten Sie sich mit Sonderzeichen in URLs befassen ( /z. B.).

Neben diesen können Sie auch die Spalten in einer Spalte aufteilen, die links.txtpro Zeile eine URL und eine Ausgabedatei enthält. Das würde Sie tun lassen

parallel --colsep " " curl "$" -o '' '' :::: links.txt 

Die --colsepZeilen werden basierend auf dem als Trennzeichen angegebenen Argument ( " "in diesem Fall) aufgeteilt.

Vielen Dank! Ihre dritte Option war genau das, wonach ich gesucht hatte. Trotzdem können die anderen Optionen in anderen Situationen nützlich sein ... kurokirasama vor 6 Jahren 0