我找到了一个网站,其中托管了一些我想要的文件,但文件太多,无法单独下载。文件名采用相当标准且可复制的形式,即 1_a、1_b、1_c 等
有没有办法使用 Linux 命令行来wget
自动下载它们?我可以轻松地将文件名放入每行 1 个条目的文本文件中,并指示命令行从那里查找,但它不会是整个 URL,只是更改的部分,因此命令需要类似于:
wget url.com/files/(bit from file).doc sourcefile.txt
基本上能够将源文件中的条目替换为括号中的位。
另外,在一个阶段,一大块(几百个)文件只是按顺序编号,那么我可以为该位使用 for 循环吗?如果是这样,我将如何在命令行中按语法执行此操作?
答案1
您可以使用 for 循环:
for x in a b c d e f g h ; do
wget http://url.com/$x.doc
done
可以在 bash 中缩短为
for x in {a..h} ; do
wget ...
done
但即使没有 for 循环,您也可以使用这个简写:
wget http://url.com/{a..h}.doc
如果名称不连续并且您需要从文件中读取它们,请使用 while 循环:
while read x ; do
wget http://url.com/$x.doc
done < sourcefile.txt
答案2
如果您已使用相对 URL 创建了文件,则可以执行以下操作:
wget -i /path/to/file -B http://base_url_here
因此,例如,如果您想下载http://www.myfiles.com/*.txt
其中*
可以有许多不同的内容,例如a
,,a_1
...,您只需创建一个包含条目的文件
a.txt
a_1.txt
a_2.txt
...
并输入命令:
wget -i /path/to/file -B http://www.myfiles.com
该-i
开关指示wget
从文件中读取其链接,并且该-B
开关指示它将给定参数作为基本 URL 添加到从文件读取的所有链接中。
答案3
您可以使用httrack
下载整个文件目录(基本上镜像站点中的所有内容),或者您可以指定httrack
过滤器以及特定的文件扩展名,例如仅下载.pdf
文件。
您可以阅读更多有关httrack
的过滤能力如果您只想下载以特定方式命名的文件,则需要使用它。
以下是通配符功能的一些示例:
*[file]
或*[name]
- 任何文件名或名称,例如不是/,?和 ;人物*[path]
- 任何路径(和文件名),例如不是?和 ;人物*[a,z,e,r,t,y]
- a、z、e、r、t、y 中的任何字母*[a-z]
- 任何字母*[0-9,a,z,e,r,t,y]
- 0..9 和 a,z,e,r,t,y 之间的任何字符
例子
$ httrack http://url.com/files/ -* +1_[a-z].doc -O /dir/to/output
开关如下:
-*
- 从要下载的内容列表中删除所有内容+1_[a-z].doc
- 下载名为 1_a.doc、1_b.doc 等的文件。-O /dir/to/output
- 在这里写下结果