Eu gostaria de poder escrever um script bash para atualizar automaticamente minhas extensões do MediaWiki e acho que usarei este sitehttps://extdist.wmflabs.org/dist/extensions/para fazer isso. Mas como você pode ver, cada nome de arquivo tarball tem uma combinação aleatória (ou assim me parece) de letras e números após o traço final (-). Então, o que eu gostaria é de alguma forma de baixar apenas arquivos com esse tipo de nome, extname-REL1_25*.tar.gz
onde * é o local onde o curinga no nome entraria e extname
se referiria ao nome da extensão que desejo.
Responder1
expansão de chave wget
Use a expansão de chaves com wget para baixar vários arquivos de acordo com um padrão.
Exemplo:
wget -c https://extdist.wmflabs.org/dist/extensions/GoogleDocTag-REL1_{22-45203b7,23-249c6f2,24-3186a71,25-10e101f}.tar.gz
O sinalizador opcional -c
continua o download se ele for pausado ou interrompido no mesmo ponto onde foi interrompido. A -c
opção é útil quando você está baixando um grande número de arquivos e deseja baixar todos os arquivos em lote sem interrupções.
wget baixa vários arquivos de uma lista
Exemplo:
lynx -dump "https://extdist.wmflabs.org/dist/skins/" | awk '/http/{print $2}' | uniq >> list.txt
wget -c -E -H -k -K -p -e robots=off -i ./list.txt
opções recursivas de aceitação/rejeição do wget
Opções recursivas de aceitação/rejeição -A acclist --accept acclist -R lista rej --rejeitar lista rej. Especifique listas separadas por vírgulas de sufixos ou padrões de nomes de arquivos para aceitar ou rejeitar. Observe que se algum dos caracteres curinga, *, ?, [ou], aparecem em um elemento de acclist ou rejlist, será tratado como um padrão, em vez de um sufixo. Neste caso, você tem que colocar o padrão entre aspas para evitar que seu shell de expandi-lo, como em-A "*.mp3"ou-A '*.mp3'.
Exemplo:
lynx -dump "https://extdist.wmflabs.org/dist/skins/" | awk '/http/{print $2}' | uniq >> list.txt
wget -c -A "Vector*.tar.gz" -E -H -k -K -p -e robots=off -i ./list.txt
Ambas -A
as -R
opções baixam todos os arquivos e, em seguida, as opções aceitar e rejeitar excluem os arquivos baixados que não correspondem ao padrão. Isso é terrivelmente ineficiente. Uma maneira mais rápida de fazer isso seria fazer a correspondência de padrões no arquivo list.txt para remover todos os arquivos indesejados de list.txt antes de baixar qualquer coisa.
Suponha que você queira baixar todos os arquivos dohttps://extdist.wmflabs.org/dist/extensions/que satisfaçam as seguintes condições:
- versão 1.25
- apenas as extensões MediaWiki selecionadas
Supondo que você já tenha criado um arquivo list.txt que contém todos os links emhttps://extdist.wmflabs.org/dist/extensions/, você abre list.txt em um editor de texto que suporta correspondência de padrões e filtra o conteúdo de list.txt para corresponder às linhas que possuem a string 1_25
(que se refere à versão 1.25) e, em seguida, filtra esses resultados para corresponder às linhas que possuem aproximadamente 20 extensões (o o número 20 não é importante) que você deseja baixar. Em seguida, escreva os resultados em um novo arquivo chamado new-list.txt (o nome do arquivo new-list.txt não é importante) e baixe os vários arquivos (cerca de 20 neste exemplo) usando new-list.txt após a -i
opção do wget para ler URLs de um arquivo local ou externo.
Uma melhoria adicional neste método seria reduzir o número de extensões correspondentes, filtrando o conteúdo de list.txt para corresponder às extensões que contêm strings que correspondem a mais de uma extensão que você está procurando. Por exemplo, se a string wiki
corresponder a várias extensões que você está procurando, você poderá filtrar o conteúdo de list.txt para corresponder wiki
e economizar um pouco de tempo. Emhttps://extdist.wmflabs.org/dist/extensions/existem cinco links que contêm ambos 1_25
e wiki
você pode encontrar todos os cinco links com duas correspondências de padrão.
Responder2
Não, é impossível com curingas. Mas nesta situação o wget funcionará com download recursivo -https://unix.stackexchange.com/questions/25340/download-recursively-with-wget