我已经完成bulk download from archive.org using wget设置为将每个IDENTIFIER
的所有文件列表吐出到各自的文件夹中。
wget -r -H -nc -np -nH -e robots=off -l1 -i ./itemlist.txt -B 'http://archive.org/download/'
这导致从根目录组织文件夹,例如:
./IDENTIFIER1/file.blah
./IDENTIFIER1/something.la
./IDENTIFIER1/thumbnails/IDENTIFIER_thumb001.gif
./IDENTIFIER1/thumbnails/IDENTIFIER_thumb002.gif
./IDENTIFIER1/IDENTIFIER_files.xml
./IDENTIFIER2/etc.etc
./IDENTIFIER2/blah.blah
./IDENTIFIER2/thumbnails/IDENTIFIER_thumb001.gif
etc
IDENTIFIER
是来自archive.org的文件集合的名称,因此,在每个文件夹中,还有一个名为IDENTIFIER_files.xml
的文件,其中包含所有文件的校验和。文件夹,包装在各种xml标签中。
由于这是批量下载并且有数百个文件,因此我们的想法是编写一些可以选择每个文件的脚本(最好是bash?编辑:可能是PHP?)。 xml文件并抓取它以便对文件进行测试以显示任何损坏,失败或修改的下载。
例如:
从archive.org/details/NuclearExplosion,XML是:
https://archive.org/download/NuclearExplosion/NuclearExplosion_files.xml
如果检查该链接,您可以看到XML中的MD5或SHA1哈希选项,以及文件标记中的相对文件路径(与本地相同)。 / p>
因此。我们如何:
对于IDENTIFIER
的每个文件夹,选择并抓取每个文件名的XML和所选的校验和;
实际测试每个文件的校验和;
将失败的校验和的输出记录到仅列出失败的IDENTIFIER
的文件(例如,称为./RetryIDs.txt
的文件),因此可以使用该列表尝试下载重新尝试。
wget -r -H -nc -np -nH -e robots=off -l1 -i ./RetryIDs.txt -B 'http://archive.org/download/'
任何关于如何将它拼凑在一起的线索都会非常有帮助。
另一个额外的激励 - 如果有解决方案,也许是一个好主意,如果我们让archive.org知道,那么他们可以把它放在他们的博客上。我确定我不是唯一会发现这非常有用的人!
先谢谢大家。
编辑:好的,所以bash脚本看起来很棘手。可以用PHP完成吗?
答案 0 :(得分:3)
如果你真的想要走bash
路线,这就是你开始做的事情。您可以使用xml2工具套件将XML转换为更易于修改传统shell脚本的工具,然后执行以下操作:
#!/bin/sh
xml2 < $1 | awk -F= '
$1 == "/files/file/@name" {name=$2}
$1 == "/files/file/sha1" {
sha1=$2
print name, sha1
}
'
这将在标准输出上生成一个文件名列表及其对应的SHA1校验和。这应该让你更接近解决方案。
实际上,使用该输出来验证文件是留给读者的练习。