multiplos processos

1. multiplos processos

Perfil removido
removido

(usa Nenhuma)

Enviado em 10/10/2010 - 15:44h

queria criar um script que faça duas coisas simultaneas

ex:

eu crio uma lista de downloads, assim que cada download terminar ele ja compacta, ao msm tempo vai baixando o proximo arquivo da lista

isso é só um exemplo

eu sei fazer assim

baixa1
compacta1
baixa2
compacta2
baixa3
compacta3

ou

baixa1
baixa2
baixa3
compacta1
compacta2
compacta3

mas quero fazer isso simultaneamente

baixa1
compacta1 e baixa2
compacta2 e baixa3
compacta3

vlw


  


2. Re: multiplos processos

José Mário
miura 787

(usa Ubuntu)

Enviado em 11/10/2010 - 11:31h

Eu faria o seguinte:

Cria um script que receba como argumento o caminho do download e faça o download e compacte este único arquivo.

Crie um segundo script que chame o primeiro quantas vezes forem necessário.

Não sei te dizer sem estar na frente do meu pc, mas tem como à partir de um script chamar processos simultâneamente.

Não sei se é com o comando open <script>

Ou se é com o & no final... tenho q pesquisar...

Mas já adiante o script que recebe o caminho do download e compacta só um arquivo, teste e de o resultado.

Caso eu encontre o comando para abrir outro script em background eu posto novamente.

Ats
Miura 787


3. Dá pra ter +/- uma ideia com isso...

Osama Jr.
/bin/laden

(usa Void Linux)

Enviado em 11/10/2010 - 13:59h

Você pode tentar algo tipo:

$ cat downloads_list
http://www.url_1.com/arquivo_1.xxx
http://www.url_2.com/arquivo_2.xxx
http://www.url_3.com/arquivo_3.xxx

#!/bin/bash
#
#
lista="/tmp/downloads_list"

function compactaArquivo { gzip -9 "$1"; }

while read i
do
wget --user-agent=Mozilla "$i"
if [ $? -eq 0 ]
then
arquivo=${i##*/}
compactaArquivo $arquivo &
continue
fi
done < $lista


4. Re: multiplos processos

igor
igorbsp

(usa Slackware)

Enviado em 12/10/2010 - 14:01h

Você pode fazer assim também:

cat /home/lista.txt
http://www.adfad.com/download
http://www.adfad.com/download2
http://www.adfad.com/download3

-

#!/bin/bash
lista_download='/home/lista.txt'
pasta_do_download='/tmp/downloads'
msg_erro_download='Ocorreu um erro no download do seguinte link:'
logs_temporario='/tmp/downloads/log.txt'


cd $pasta_do_download
verifica_quantos_links_tem=$(cat $lista_download | wc -l)
for n in $(seq 1 $verifica_quantos_links_tem); do
link=$(grep -n '' $lista_download | grep $n: | sed 's/'$n'://g')
echo [$n/$verifica_quantos_links_tem] Baixando o arquivo...; echo $link
wget $link 2>> $logs_temporario || echo $msg_erro_download $link
arquivo=$(grep 'Saving to:' $logs_temporario | awk -F" " '{print $3 ; }' | sed 's/"//g')
# ----- Compactando
tar -zcvf $pasta_do_download/$arquivo.tar.gz $arquivo
rm $logs_temporario
rm $arquivo
done
exit


5. Re: multiplos processos

Perfil removido
removido

(usa Nenhuma)

Enviado em 12/10/2010 - 14:06h

um pouco dpois de criar esse topico, eu pensei em um modo que daria certo, ai eu recebi email do VOL e vi os posts, era muito igual oq o /bin/laden falou

assim que eu testar eu posto o resultado


6. Re: multiplos processos

DAVISON MARCEL PASQUALINI
fdmarp

(usa Debian)

Enviado em 13/10/2010 - 19:50h

vou dar uma sugestão ... por que não mkfifo?

um exemplo BEEEMMM simples e pouco elaborado, mas só pra mostrar como funciona

#bash
#script1
mkfifo saidateste
tail -f saidateste | while read line; do echo compactar $line; done


#bash
#script2
while true
do
count=$(($count+1))
arquivo="teste$count"
(echo $arquivo)>saidateste
sleep 5
done


nesse caso o script2 vai escrevendo numa fila virtual e o script1 vai tirando, no seu caso ao terminar o download de um arquivo, de um echo do nome dele para o arquivo virtual e o script1 le esse nome e compacta ele.
detalhe, como é um "arquivo" fifo (first in first out) você pode colocar vários script1, ou mesmo vários script2 ... ai seu processamento paralelo e sem duplicidade ....


Só uma idéia!

se gostar dela da um alo e a gente ajuda a elaborar!!!






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts