Pular para o conteúdo

Desafio Nerd [RESOLVIDO]

Responder tópico
  • Denunciar
  • Indicar
01 02

1. Desafio Nerd [RESOLVIDO]

Enviado em 22/05/2015 - 13:12h

Eu costumo baixar muitos filmes via torrent e a medida que vou assistindo os arquivos vão se acumulando no disco. Vez por outra gravo os filmes em DVD para liberar espaço no HD, tentando fazer isso da melhor maneira possível para não deixar espaço sobrando no DVD e otimizar o número de filmes por DVDs gravados. O que pode ser uma tarefa bem chata se o número de filmes for grande.

A proposta é criar um script que escolhesse automaticamente, de acordo com o tamanho dos arquivos, qual seria a melhor combinação de filmes a serem adicionados ao DVD (4,7 GB), de modo a não deixar muitos espaços sobrando em cada DVD.

Isso seria possível? Está lançado o desafio...
;)


Responder tópico

2. Re: Desafio Nerd [RESOLVIDO]

Melhor resposta

Enviado em 25/05/2015 - 21:32h


Amigo,

fiz o script,

tentei deixar o código o mais simples possível,
caso você queira adaptar e/ou melhorar o código, fique à vontade.

para usar: ./script.sh "diretório"


#!/bin/bash

label="DVD"
maxsize=5046586572 #B 4.7*1024^3
IFS=$'\n'
dir="$1"
fl=(`ls "$dir"`)
len=${#fl[@]}
n=1
i=0
while [[ $i -lt $len ]]; do
echo "[$label$n]"
#mkdir -p "$dir/$label$n" # criar diretório
tlsize=0

for (( j=0; j<$len; j++ )); do
f="${fl[$j]}"
if [ -n "$f" ]; then
fsize=`du -hsb0 "$dir/$f" | awk '{print $1}'`
if [[ $fsize -ge $maxsize ]]; then
i=$(( i + 1 ))
continue
fi
if [[ $(( $tlsize + $fsize )) -ge $maxsize ]]; then
continue
fi
du -hs "$dir/$f"
#mv "$dir/$f" "$dir/$label$n" # mover arquivo
fl[$j]=""
i=$(( i + 1 ))
tlsize=$(( tlsize + fsize ))
fi
done

echo
echo "Total: "`echo "scale=2; $tlsize/1024^3" | bc`"G"
echo
n=$(( n + 1 ))
done

for (( j=0; j<$len; j++ )); do
if [ -n "${fl[$j]}" ]; then
echo "Erro: Arquivo maior que tamanho maximo"
echo " " `du -hs "$dir/${fl[$j]}"`
fi
done


se quiser que o script mova os arquivos para uma pasta, tipo DVD1, DVD2...
descomentar as linhas 13 e 28 do código.

espero que funcione.
t+

3. Re: Desafio Nerd [RESOLVIDO]

Enviado em 22/05/2015 - 13:42h


sim e possível

4. Re: Desafio Nerd [RESOLVIDO]

Enviado em 22/05/2015 - 14:10h


Vai pagar quanto?

5. Re: Desafio Nerd [RESOLVIDO]

Enviado em 22/05/2015 - 14:55h

leandro.bernardo escreveu:


Vai pagar quanto?
Deus lhe pague!!! :p


8. Re: Desafio Nerd [RESOLVIDO]

Enviado em 22/05/2015 - 15:43h

interessante. um scriptinho desse tipo, qualquer hora dessa sempre é útil.
depois, se sobrar um tempo aqui vou tentar fazer.

eu tambem tenho uns filmes aqui só que em blueray

9. Re: Desafio Nerd [RESOLVIDO]

Enviado em 23/05/2015 - 18:27h

Adryanohexa123 escreveu:


sim e possível
Mostre-nos!!! ;)


10. Re: Desafio Nerd [RESOLVIDO]

Enviado em 24/05/2015 - 02:12h

Fiz uma pesquisa rápida e parece que esse problema é conhecido como bin packing. Talvez a resposta esteja aqui https://www.ime.usp.br/~cris/aulas/12_2_5727/slides/aula9.pdf, não deve ser difícil implementar. Depois que acordar confirmo.
"Ninguém é tão sábio que não tenha nada a aprender ou
tão ignorante que não tenha nada pra ensinar."

11. Re: Desafio Nerd [RESOLVIDO]

Enviado em 24/05/2015 - 11:02h

lucascp2004_mint escreveu:

Fiz uma pesquisa rápida e parece que esse problema é conhecido como bin packing. Talvez a resposta esteja aqui https://www.ime.usp.br/~cris/aulas/12_2_5727/slides/aula9.pdf, não deve ser difícil implementar. Depois que acordar confirmo.
"Ninguém é tão sábio que não tenha nada a aprender ou
tão ignorante que não tenha nada pra ensinar."
Interessante, creio que esse é o ponto. Agora é só colocar isso num script. Pena que eu não seja nem bom com scripts e nem com matemática... hehehe!!!


12. Re: Desafio Nerd [RESOLVIDO]

Enviado em 24/05/2015 - 15:53h


Bom,

De inicio, achei que daria para fazer um script com poucas linhas código.
Mas eu fiz um teste aqui e notei que não seria tão fácil, pelo menos da forma que estou pensando.

A ideia inicial é essa seguinte:

-listar arquivos e pastas
-pegar o tamanho dos arquivos e pastas
-jogar tudo em uma matrix
-ordenar os itens da matrix em ordem decrescente
-distribuir os itens da matrix em partes de 4.7G
-mover os arquivos para uma pasta
-mostra na tela o resultado

Então, o que você acha?

01 02

Responder tópico

Responder tópico

Entre na sua conta para responder.

Fazer login para responder