2016-07-22 29 views
1

Ich möchte parallele Downloads tun, aber das Problem wget Ausgabe nicht korrekt Dateiname.xargs wget extrahieren Dateiname von URL mit Parameter

url.txt

http://example.com/file1.zip?arg=tereef&arg2=okook 
http://example.com/file2.zip?arg=tereef&arg2=okook 

Befehl

xargs -P 4 -n 1 wget <url.txt 

Ausgabedateiname

file1.zip?arg=tereef&arg2=okook 
file2.zip?arg=tereef&arg2=okook 

erwartete Ausgabe

file1.zip 
file2.zip 

Ich bin neu mit Bash, bitte schlagen Sie mir vor, wie Sie den richtigen Dateinamen ausgeben, und schlagen Sie nicht for Schleife oder &, weil es blockiert.

Danke

+0

Verwenden Sie den '-O file' Schalter einstellen der Name der Ausgabedatei in 'wget'. – xxfelixxx

Antwort

0

können Sie ein Bash-Funktion verwenden, die Sie exportieren

außerhalb der aktuellen Shell gesehen werden
function mywget() 
{ 
    wget -O ${1%%\?*} "'$1'" 
} 
export -f mywget 
xargs -P 4 -n 1 -I {} bash -c "mywget '{}'" < url.txt 
+0

es funktioniert danke, aber ich muss '$ {1 %% \? *}' Mit '$ (basename $ {1 %% \? *})' Weil es 'http:/zurückgeben/example.com/file1.zip' – uingtea

+0

Stimmt, das habe ich vergessen –

0

Verarbeiten Sie Ihre Eingabe den gewünschten Befehl, dann führen Sie es durch xargs zu produzieren.

perl -ne - iterieren über die Zeilen der Eingabedatei und führen Sie das Inline-Programm

-e: Führen Sie Perl Einzeiler

-n: Schleife über alle Eingangsleitungen, die jeweils $ zuweisen _ im Gegenzug.

xargs -P 4 -n 1 -i -t wget "{}"

-P 4: Max von 4 verarbeitet zu einer Zeit

-n 1: Verbrauchen eine Eingangsleitung zu einem Zeitpunkt

-I: Verwenden des String ersetzen "{}"

-t: Den Befehl vor der Ausführung ausgeben

perl -ne ' 
    chomp(my ($url) = $_);       # Remove trailing newline 
    my ($name) = $url =~ m|example.com/(.+)\?|; # Grab the filename 
    print "$url -O $name\n";      # Print all of the wget params 
' url.txt | xargs -P 4 -n 1 -i -t wget "{}" 

Ausgabe

wget http://example.com/file1.zip?arg=tereef&arg2=okook -O file1.zip 
wget http://example.com/file2.zip?arg=tereef&arg2=okook -O file2.zip 
--2016-07-21 22:24:44-- http://example.com/file2.zip?arg=tereef&arg2=okook%20-O%20file2.zip 
--2016-07-21 22:24:44-- http://example.com/file1.zip?arg=tereef&arg2=okook%20-O%20file1.zip 
Resolving example.com (example.com)... Resolving example.com (example.com)...  93.184.216.34, 2606:2800:220:1:248:1893:25c8:1946 
93.184.216.34, Connecting to example.com (example.com)|93.184.216.34|:80... 2606:2800:220:1:248:1893:25c8:1946 
Connecting to example.com (example.com)|93.184.216.34|:80... connected. 
connected. 
HTTP request sent, awaiting response... HTTP request sent, awaiting response... 404 Not Found 
2016-07-21 22:24:44 ERROR 404: Not Found. 

404 Not Found 
2016-07-21 22:24:44 ERROR 404: Not Found. 
+0

danke für deine antwort – uingtea