Quero baixar muitos arquivos (> dezenas de milhões). Eu tenho o URL de cada arquivo. Eu tenho a lista de URLs em um arquivo URLs.txt
:
http://mydomain.com/0wd.pdf
http://mydomain.com/asz.pdf
http://mydomain.com/axz.pdf
http://mydomain.com/b00.pdf
http://mydomain.com/bb0.pdf
etc.
Posso baixá-los via wget -i URLs.txt
, porém ultrapassaria o número máximo de arquivos que podem ser colocados em uma pasta.
Como posso baixar esta grande lista de URLs para que os arquivos baixados sejam divididos em subpastas contendo a primeira letra dos nomes dos arquivos? Por exemplo,:
0/0wd.pdf
a/asz.pdf
a/axz.pdf
b/b00.pdf
b/bb0.pdf
etc.
Se isso importa, eu uso o Ubuntu.
Talvez algo como:
O
awk
prefixo de cada linha com o primeiro caractere do nome do arquivo, que é então usado para selecionar um diretório de saída nocurl
comando. Você poderia usar a-P
opção de implementação GNUxargs
para executar múltiplas buscas em paralelo.Isso pressupõe que os URLs não contenham espaços em branco, aspas ou barras invertidas, mas os URLs não devem conter outros que não sejam codificados por URI (mesmo que
curl
seja capaz de lidar com eles e fazer a codificação de URI por si só).Dada a sua entrada de amostra, executar o procedimento acima produz:
ChatGPT forneceu alguns códigos funcionais em Python (confirmo que funciona com Python 3.11):
com
somefile.txt
contendo:Variantes mais avançadas:
Código: