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
.
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 ...
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
.
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.
Tags command-line wget