題 使用命令行/ wget自動下載一系列文件


我有一個案例,我想為每個讀者觸發一個114文件(朗誦)列表的自動下載,
例如,如果我想下載一個被叫的讀者的朗誦 abkr,文件的網址將如下所示..

http://server6.mp3quran.net/abkr/001.mp3
http://server6.mp3quran.net/abkr/002.mp3
...
http://server6.mp3quran.net/abkr/113.mp3
http://server6.mp3quran.net/abkr/114.mp3

這些都是古蘭經的背誦,所以他們總共有114個

是否有一種簡單的方法來循環使用 command line 上 視窗 ?


4
2017-09-03 13:14


起源


哪個操作系統? - Indrek
Windows是首選,Mac也可以。 - Anas Nakawa


答案:


為了完整起見,這是一個僅批處理的解決方案:

@ECHO OFF
SetLocal EnableDelayedExpansion
FOR /L %%G IN (1, 1, 114) DO (
    SET num=%%G
    IF 1!num! LSS 100 SET num=0!num!
    IF 1!num! LSS 200 SET num=0!num!
    wget http://server6.mp3quran.net/abkr/!num!.mp3
)
EndLocal

編輯1: 刪除了不必要的括號。

編輯2: 將計數器起始值更正為1。


4
2017-09-04 09:15



所有解決方案都很棒,但我會接受這個,因為它是直接的(命令提示符),並且不需要除了wget之外的其他東西。 - Anas Nakawa
一個小的修正,循環從1而不是0開始。 - Anas Nakawa
哎呀,糾正...... - zb226


對於Windows解決方案,請嘗試以下PowerShell腳本:

$Client = New-Object System.Net.WebClient
for ($i = 1; $i -le 144; $i++)
{
    $file = [string]::Format("{0:D3}.mp3", $i)
    $Client.DownloadFile("http://server6.mp3quran.net/abkr/" + $file, $file)
}

第一 cd 當然,進入要下載文件的目錄。


4
2017-09-03 14:55





您尚未聲明操作系統,但如果您使用的是* nix和Bash,則可以使用以下工作:

wget http://server6.mp3quran.net/abkr/{001..114}.mp3

適用於任何shell的解決方案:

#!/bin/sh
for i in $(seq -w 1 114); do
    printf 'http://server6.mp3quran.net/abkr/%s.mp3 ' $i
done | xargs wget

或者如果 seq 在系統上不存在:

#!/bin/sh
i=1
MAX=114
while [ $i -le $MAX ]; do
    printf 'http://server6.mp3quran.net/abkr/%03d.mp3 ' $i
    i=$((i+1))
done | xargs wget

只需將其複制+粘貼到shell中或將其保存在腳本文件中並運行即可。


4
2017-09-03 13:24



是Mac OSX包含在你的 *nix 解決方案 - Anas Nakawa
anasnakawa:是的,你可以在MacOSX上運行Bash,但我相信它不是默認的shell。嘗試運行命令“bash“在終端中。您可能需要事先安裝它,或者使用默認shell查找簡單的解決方案。澄清一下:上面肯定會有效,但如果尚未安裝Bash,它可能不是最明顯的方法。 - Daniel Andersson


作為參考和完整性的一個沒有seq的版本,一個很好的輸出,如果下載停止由於某種原因繼續:

#!/bin/sh
for i in 00{1..9} 0{10..99} {100..144}
    printf 'http://server6.mp3quran.net/abkr/%s.mp3 ' $i
done | xargs wget -q --show-progress -c

0
2018-05-21 06:20