Acho que wget
pode fazer isso com algumas opções. Por favor, tente wget -input-file=urls.txt --force-directories
No manual do wget :
--input-file=file
Read URLs from a local or external file. If ‘-’ is specified as file, URLs are read from the standard input. (Use ‘./-’ to read from a file literally named ‘-’.)
e
--force-directories
The opposite of ‘-nd’—create a hierarchy of directories, even if one would not have been created otherwise. E.g. ‘wget -x http://fly.srk.fer.hr/robots.txt’ will save the downloaded file to fly.srk.fer.hr/robots.txt.