Obtendo todos os arquivos de uma página da Web usando curl

87

Gostaria de baixar os arquivos, de uma só vez, da seguinte página, usando curl: http://www.ime.usp.br/~coelho/mac0122-2013/ep2/esqueleto/

Eu tentei curl http://www.ime.usp.br/~coelho/mac0122-2013/ep2/esqueleto/e ele retornou várias linhas no terminal, mas não conseguiu nenhum arquivo.

Thi G.
fonte

Respostas:

125

Use em wgetvez disso. Você pode instalá-lo brew install wgetse tiver instalado o Homebrew ou sudo port install wgetse tiver instalado o MacPorts.

Para baixar arquivos de uma lista de diretórios, use -r(recursivo), -np(não siga os links para os diretórios principais) e -kfaça com que os links em HTML ou CSS baixados aponte para arquivos locais (credit @xaccrocheur).

wget -r -np -k http://www.ime.usp.br/~coelho/mac0122-2013/ep2/esqueleto/

Outras opções úteis:

  • -nd (sem diretórios): faça o download de todos os arquivos para o diretório atual
  • -e robots.off: ignore arquivos robots.txt, não baixe arquivos robots.txt
  • -A png,jpg: aceite apenas arquivos com as extensões pngoujpg
  • -m (espelho): -r --timestamping --level inf --no-remove-listing
  • -nc, --no-clobber: Ignore o download se houver arquivos
Lri
fonte
3
wget -r -np -k http://your.website.com/specific/directory. O truque é usar -kpara converter os links (imagens, etc.) para visualização local.
yPhil
brewe portnão funciona para eu instalar o wget. O que devo fazer?
Hoseyn Heydari 27/01
@HoseynHeydari: você pode usar o rudix.org para binários compilados para osx. então você precisa instalar Rudix e use: sudo Rudix instalar wget
Mamonu
A opção -knem sempre funciona. Por exemplo, se você tem dois links apontando para o mesmo arquivo na página da Web que você está tentando capturar recursivamente, wgetapenas parece converter o link da primeira instância, mas não da segunda.
Kun
22

curlsó pode ler arquivos de páginas da web, o conjunto de linhas que você obtém é, na verdade, o índice de diretório (que você também vê no seu navegador se acessar esse URL). Para usar curle algumas ferramentas Unix mágicas para obter os arquivos, você pode usar algo como

for file in $(curl -s http://www.ime.usp.br/~coelho/mac0122-2013/ep2/esqueleto/ |
                  grep href |
                  sed 's/.*href="//' |
                  sed 's/".*//' |
                  grep '^[a-zA-Z].*'); do
    curl -s -O http://www.ime.usp.br/~coelho/mac0122-2013/ep2/esqueleto/$file
done

que colocará todos os arquivos no diretório atual.

Para necessidades mais elaboradas (incluindo a obtenção de vários arquivos de um site com pastas / diretórios), wget(conforme proposto em outra resposta já), é a melhor opção.

nohillside
fonte
Obrigado. Esta é uma boa solução e é ótimo fornecer um exemplo de trabalho!
egelev
1
xmllint --html --xpath '//a/@href'provavelmente é um analisador melhor que grep.
ceving 05/02
8

Ref: http://blog.incognitech.in/download-files-from-apache-server-listing-directory/

Você pode usar o seguinte comando:

wget --execute="robots = off" --mirror --convert-links --no-parent --wait=5 <website-url>

Explicação com cada opção

  • wget: Comando simples para fazer solicitação de CURL e baixar arquivos remotos em nossa máquina local.
  • --execute="robots = off": Isso ignorará o arquivo robots.txt durante o rastreamento pelas páginas. É útil se você não estiver obtendo todos os arquivos.
  • --mirror: Esta opção basicamente reflete a estrutura de diretórios para o URL especificado. É um atalho para o -N -r -l inf --no-remove-listingque significa:
    • -N: não recupere arquivos a menos que seja mais recente que local
    • -r: especificar download recursivo
    • -l inf: profundidade máxima da recursão (inf ou 0 para infinito)
    • --no-remove-listing: não remova os arquivos '.listing'
  • --convert-links: criar links em HTML ou CSS baixados apontam para arquivos locais
  • --no-parent: não ascenda ao diretório pai
  • --wait=5: aguarde 5 segundos entre as recuperações. Para não debater o servidor.
  • <website-url>: Este é o URL do site de onde baixar os arquivos.

Download feliz: smiley:

Udit Desai
fonte
3

Você pode usar o httrack disponível para Windows / MacOS e instalável via Homebrew.

user242053
fonte
algo novo para mim, obrigado. o melhor é que é rápido e rápido: one-liner. basta cortar a gordura e evitar todo o lixo.
Peter Teoh
0

Para aqueles de nós que preferem usar um aplicativo com uma GUI, existe o programa shareware barato DeepVacuum for Mac OS X , que é implementado wgetde maneira amigável ao usuário, com uma lista de predefinições que podem lidar com tarefas geralmente necessárias. Você também pode salvar suas próprias configurações personalizadas como predefinições.

insira a descrição da imagem aqui


fonte