Download de um diretório on-line (apache) localmente usando cli (wget…)

0

Não é realmente uma pergunta esta - mas respostas alternativas são certamente bem vindas! :)

Às vezes, preciso baixar os arquivos listados em uma listagem de diretório do Apache, como em:

... em um determinado diretório no meu computador, e gostaria de usar ferramentas de linha de comando para isso.

No que diz respeito a wget , na verdade existem alguns switches que devem estar no lugar - notando que wget tende a baixar itens únicos - ou a reconstruir as pastas do servidor localmente!

Como eu passei cerca de meia hora descobrindo quais são esses switches apropriados (para copiar os arquivos remotos localmente como, digamos, FTP), eu gostaria de documentá-los aqui; então o link acima seria baixado com:

wget -nd -r -l 1 http://www.gnu-darwin.org/www001/src/ports/net/samba-libsmbclient/work/samba-3.0.28/source/libsmb/

... onde:

   -nd
   --no-directories
       Do not create a hierarchy of directories when retrieving
       recursively.  With this option turned on, all files will get saved
       to the current directory, without clobbering [...]

   -r
   --recursive
       Turn on recursive retrieving.

   -l depth
   --level=depth
       Specify recursion maximum depth level depth.  The default maximum
       depth is 5.

Seria bom ouvir alternativas ao comando acima - talvez usando diferentes conjuntos de opções para wget - ou talvez usando curl ou outros pacotes ...

    
por sdaau 14.09.2011 / 08:59

2 respostas

1

Veja também as opções -nH a.k.a --no-host-directories e --cut-dirs . Também uso frequentemente --accept / -A e --reject / -R .

    
por 14.09.2011 / 19:31
1

Depois de algum tempo, graças aos ponteiros de @ jw013 e em Sincronizar com uma listagem de diretório de um servidor Apache - Unix & Linux Stack Exchange , finalmente encontrei meu comando "ultimate" wget .

Suponha que você tenha uma árvore de arquivos e diretórios em um diretório chamado myfiles_dir e permita que esse diretório seja acessível por meio de uma listagem de diretório do Apache em http://localhost/shared/myfiles_dir . Então, você pode sincronizar o diretório localmente com:

wget -r -N --no-parent --reject '*index.html*' -nH --cut-dirs=1 http://localhost/shared/myfiles_dir/

... onde:

-r,  --recursive              specify recursive download.
-N,  --timestamping           don't re-retrieve files unless newer than
                              local.
-np, --no-parent              don't ascend to the parent directory.
-R,  --reject=LIST            comma-separated list of rejected extensions.
-nH, --no-host-directories    don't create host directories.
     --cut-dirs=NUMBER        ignore NUMBER remote directory components.

Isso fará o download do conteúdo em um subdiretório myfiles_dir criado no diretório wget foi chamado de (o diretório de trabalho), sem nenhum arquivo index.html residual.

Observe que a barra à direita / após o link / endereço http é extremamente importante: se não estiver lá - como em http://localhost/shared/myfiles_dir - em chamadas repetidas de wget do mesmo diretório de trabalho local, o HTML de a listagem do diretório será salva como várias cópias, por exemplo myfiles_dir.1 , myfiles_dir.2 etc, apesar de quaisquer opções (embora, as listagens de diretório HTML não serão salvas para quaisquer subdiretórios dentro, conforme solicitado; também, na primeira vez que o comando for executado, não haverá um diretório HTML listagem salva para myfiles_dir ).

No entanto, com a barra final - como em http://localhost/shared/myfiles_dir/ - nenhuma listagem de diretórios HTML será salva para nenhum diretório, incluindo a "raiz" myfiles_dir , após chamadas repetidas para wget da mesma localidade.

    
por 08.10.2014 / 12:20