Desafio Nerd [RESOLVIDO]

1. Desafio Nerd [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

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...
;)




  


2. MELHOR RESPOSTA

sheldon
sheldon

(usa Debian)

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]

Adriano Silva
slivadrip

(usa Linux Mint)

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


sim e possível


4. Re: Desafio Nerd [RESOLVIDO]

Leandro Bernardo
leandro.bernardo

(usa Debian)

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


Vai pagar quanto?


5. Re: Desafio Nerd [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

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

leandro.bernardo escreveu:


Vai pagar quanto?


Deus lhe pague!!! :p




6. Re: Desafio Nerd [RESOLVIDO]

Daniel Lara Souza
danniel-lara

(usa Fedora)

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


compra um HD Externo e colocar esses arquivos lá
http://www.walmart.com.br/google?refsmkt=232525&fq=C:6552/6605/6609&PS=20&O=OrderByTopSa...


7. Re: Desafio Nerd [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

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

danniel-lara escreveu:


compra um HD Externo e colocar esses arquivos lá
http://www.walmart.com.br/google?refsmkt=232525&fq=C:6552/6605/6609&PS=20&O=OrderByTopSa...


Sim, sem dúvida essa seria a opção mais prática.
Fiz isso uma vez e me arrependi... comprei no Mercado-Livre e veio um HD imprestável :(
Não quero arriscar de novo!!!




8. Re: Desafio Nerd [RESOLVIDO]

sheldon
sheldon

(usa Debian)

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]

Perfil removido
removido

(usa Nenhuma)

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

Adryanohexa123 escreveu:


sim e possível


Mostre-nos!!! ;)




10. Re: Desafio Nerd [RESOLVIDO]

lucas
lucascp2004_mint

(usa Linux Mint)

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]

Perfil removido
removido

(usa Nenhuma)

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]

sheldon
sheldon

(usa Debian)

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



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts