使用 wget 从文本文件中获取文件名

使用 wget 从文本文件中获取文件名

我找到了一个网站,其中托管了一些我想要的文件,但文件太多,无法单独下载。文件名采用相当标准且可复制的形式,即 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- 在这里写下结果

相关内容