I did more work with windows-xp-sp3-x86-enu.ulz. I made a 'wud' script that can be run like 'wud windows-xp-sp3-x86-enu.ulz' to download the files with wget: for f in $(unzip -p $1 | grep url | cut -d'>' -f2 | cut -d'<' -f1); do wget "$f"; done My ~/.wgetrc: timeout=10 tries=inf user-agent= robots=off I think I was short one file because Microsoft names different EXEs the same thing. For example, different versions of .NET are named 'dotnetfx.exe'. wget handles this by appending .1, .2, etc., to the filenames. Maybe WUD is clobbering existing files. The hard part of this thing isn't downloading the files, it's knowing what to download. How are people figuring that out?