使用命令行/ wget自动下载一系列文件


4

我有一个案例,我想为每个读者触发一个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 视窗


哪个操作系统?
Indrek

Windows是首选,Mac也可以。
Anas Nakawa

Answers:


4

为了完整起见,这是一个仅批处理的解决方案:

@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。


所有解决方案都很棒,但我会接受这个,因为它是直接的(命令提示符),并且不需要除了wget之外的其他东西。
Anas Nakawa

一个小的校正,循环从1而不是0开始。
Anas Nakawa

哎呀,纠正......
zb226

4

对于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

您尚未声明操作系统,但如果您使用的是* 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中,或将其保存在脚本文件中并运行即可。


是Mac OSX包含在你的 *nix 解决方案
Anas Nakawa

anasnakawa:是的,你可以在MacOSX上运行Bash,但我相信它不是默认的shell。尝试运行命令“ bash “在一个终端中。您可能需要事先安装它,或者使用默认shell寻找一个简单的解决方案。澄清一下:上面肯定会有效,但如果尚未安装Bash,它可能不是最明显的方法。
Daniel Andersson

0

为了参考和完整性的一个没有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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.