wget lista de download para diretórios específicos

1

Eu gostaria de criar um script curto, mas doce, para usar um arquivo .list. O problema é que eu gostaria de definir diretórios nos quais esses arquivos entram.

Exemplo:

file: url.list
[group 1]
http://www.somehost.com/files/tool.7z
http://www.someotherhost.com/files/icon36.png

[group 2]
http://www.idunno.net/other-tool.tar.gz
http://265.265.265.265/config.ini
http://www.myownsite.com/tools/script-to-run-tool.cmd
eof

([grupo 1] e [grupo 2] estão aqui apenas para facilitar a leitura, eles NÃO estão no meu arquivo de lista real) (sim eu sei que o 265 não é real, é por isso que é um exemplo)

Comando

(atualmente em uso que não pode analisar pastas) wget --continue --timestamping --content-disposition -i url.list

Claro, isso atualmente baixa todos os 5 arquivos para o mesmo diretório. minha pergunta é, existe uma maneira de dizer wget para usar uma pasta diferente para o grupo 1, e para o grupo 2, no meu caso eu gostaria que isso pegue várias ferramentas que eu uso no trabalho, eu tenho um script separado no windows que cria uma chave usb do winpe e injeta todas as ferramentas nesses diretórios na chave.

Então, minha pergunta final, isso pode ser feito super fácil, ou é necessário que eu use um script completo para pegá-los e criar as pastas para eles irem e movê-los para lá? (usando -o em wget screws com meu timestamping e timestamps são críticos para a missão)

em teoria, quando isso terminar, eu gostaria de ter uma nova cópia de (nomes do psuedo):

tools/cool-tool/tool.7z
tools/cool-tool/icon36.png

tools/special-tool/other-tool.tar.gz
tools/special-tool/config.ini
tools/special-tool/script-to-run-tool.cmd
    
por Tandy1k 20.11.2013 / 02:37

3 respostas

3

Crie uma lista que tenha o URL e o diretório de destino na mesma linha:

http://www.somehost.com/files/tool.7z tools/cool-tool/
http://www.someotherhost.com/files/icon36.png tools/cool-tool/
http://www.idunno.net/other-tool.tar.gz tools/special-tool/
http://265.265.265.265/config.ini tools/special-tool/
http://www.myownsite.com/tools/script-to-run-tool.cmd tools/special-tool/

Em seguida, use um loop bash para ler o arquivo e alimentá-lo para wget:

while read url target; do 
  wget "$url" -P "$target";
done < url.list
    
por terdon 20.11.2013 / 15:32
1

Você deve conseguir fazer o que quiser com a opção wget -P ou --directory-prefix

   -P prefix
   --directory-prefix=prefix
       Set directory prefix to prefix.  The directory prefix is the
       directory where all other files and subdirectories will be saved
       to, i.e. the top of the retrieval tree.  The default is . (the
       current directory).

Existem várias outras opções para controlar como os componentes de diretório de origem são manipulados, o que também pode ser útil, dependendo do download de arquivos individuais ou do uso de alertas recursivos - consulte a seção Directory Options das páginas de manual do wget. / p>     

por steeldriver 20.11.2013 / 03:29
0

Eu inventei isso:

wgetfiles.sh :

filename=""

while read -r line
do
    if [[ "$line" =~ (https?|ftp)\:\/\/ ]]
        then
            wget "$line" -P "$currdir";
        else
            currdir="$line"
            if [ ! -d "$currdir" ]; then
                mkdir "$currdir"
            fi
    fi
done < "$filename"

para um arquivo de texto de qualquer nome:

file.txt :

Dir 1
http://www.somehost.com/files/tool.7z tools/cool-tool/
https://www.someotherhost.com/files/icon36.png tools/cool-tool/
Dir 2
http://www.idunno.net/other-tool.tar.gz tools/special-tool/
https://265.265.265.265/config.ini tools/special-tool/
Dir 3
ftp://www.myownsite.com/tools/script-to-run-tool.cmd tools/special-tool/

Isso permite usar qualquer arquivo de texto contendo o nome do diretório seguido por vários links. Cria os diretórios, se eles já não existirem. Nenhuma verificação é feita, portanto, certifique-se de ter diretórios seguidos de links, conforme mostrado.

Apenas uma pequena adição. Esta linha irá cobrir muitas situações:

wget "$line" -e robots=off -r -l 1 -nd -nc --wait 1 −−random−wait -R html,"index.*"  -P "$currdir"

Irá ignorar robots.txt ( -e robots=off ), recursar em um diretório caso o link esteja em um diretório ( -r -l 1 ), não baixará a hierarquia de diretórios do site - somente os arquivos ( -nd ), não baixará arquivos já baixados ( -nc ), aguardará aleatoriamente para baixar o próximo arquivo para ajudar ainda mais a evitar a rejeição do site ( --wait 1 −−random−wait ), e não baixará html arquivos ou arquivos do site formulário index.* ( -R html,"index.*" ).

Além disso, para criar uma hierarquia de diretórios como Dir 1/subdir 1/sub-subdir 1 :

mkdir -p "$currdir"
    
por hmj6jmh 01.07.2014 / 20:48