2016-03-24 4 views
0

Ich habe eine Datei music.txt mit Audios zum Download, wie folgt aussehen:wget: Download-Dateien mit dem Dateinamen aus der Liste der URLs mit wget

http://somehow/music/hexfilename1.mp3 1.mp3  
http://somehow/music/hexfilename2.mp3 2.mp3 
http://somehow/music/hexfilename3.mp3 3.mp3 
http://somehow/music/hexfilename4.mp3 4.mp3 

Ich will nur die MP3-Dateien herunterladen und speichern als angegebene Namen. Zum Beispiel, Download von http://somehow/music/hexfilename1.mp3, speichern wir als 1.mp3.

Antwort

2

Eigentlich ist dies eine einfache Arbeit, aber es zwei Situationen sein kann:

  1. Wenn Ihr music.txt wie in Ihrer Antwort, mit url die erste Gruppe zu sein, und der Ausgabedatei die zweite ist, dann können Sie den folgenden Befehl verwenden:

    IFS="\n" 
    for line in $(cat music.txt) 
    do 
        url=$(echo $line | awk '{ print $1 }') 
        out=$(echo $line | awk '{ print $2 }') 
        wget "$url" -O "$out" 
    done 
    
  2. Für die andere Situation, müssen Sie gerade nicht so viel Skript und einfach eine for-Schleife durch jede Zeile zu gehen und um die Parameter zu wget passieren.

Hoffe, das hilft.

+0

für mich, das nicht funktioniert hat. Ich musste das am Anfang hinzufügen: 'IFS = $ '\ n'' – demianh

+1

@demianh Ich war wahrscheinlich falsch. Es scheint, als hätte bash nur die IFS-Variable, während FS eigentlich von awk stammt. Vielen Dank! – Chromium

3

Sie können sie in Variablen mit einer while Schleife mit readread:

while read a b; do wget -O "$b" "$a"; done < music.txt