Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- # SCRIPT FEITO PARA SER USADO NAS AÇÕES PERSONALISADAS DO THUNAR.
- # SEGUNDA VERSÃO DEPOIS DE DISCUÇÃO EM LISTA DE SHELL SCRIPT
- # DEPENDE DO BASH, ZENITY, BC, WC E MP3GAIN
- # Função auto explicativa. :)
- erro() {
- zenity --info --title "Erro!" --text "$1"
- exit 1
- }
- # Verifica se foi passado ao menos um arquivo de entrada.
- [ -f "$1" ] || erro "O arquivo de entrada não foi passado como argumento ou ele não existe.\n\n-> USO: $0 \"Arquivo.mp3\" \n\nNenhum processo realizado."
- # Somente o serial do meu dispositivo MP4. Coloque aqui o seu. Não é necessário dizer que ele tem que estar correto, certo? :)
- dispositivoSerial="觛迦烶觓∑ፉ倢獓穓㨓┖슷⑲"
- # O subshel dessa linha retorna o número do dispositivo.
- read dispositivo <<< $(find "/proc/scsi/usb-storage/" -type f -exec grep -l "$dispositivoSerial" {} \+ | awk -F '/' '{print "sd "$5}' | tail -n1)
- # Verifica que a variável $dispositivo possui qualquer coisa diferente de vazio.
- [ -n "$dispositivo" ] || erro "Infelizmente o dispositivo não foi encontrado. \n\nNenhuma ação tomada."
- # O subshel dessa linha retorna o "device" do dispositivo.
- read dispositivo <<< $(dmesg | grep -e "$dispositivo.*\[.*Attached" | sed -e 's/^.*\[//g ; s/\].*$//g' | tail -n1)
- # Nessa linha o subshel retorna o ponto de montagem do dispositivo.
- read dispositivo <<< $(mount | grep -i "$dispositivo" | awk '{print $3}')
- # Verifica que a variável $dispositivo possui uma pasta de montagem válida.
- [ -d "$dispositivo" ] || erro "Infelizmente o ponto de montagem não foi encontrado. \nVerifique se o dispositivo está montado, além de inserido. \n\nNenhuma ação tomada."
- # Variável que contém o caminho da pasta de músicas. Altere a seu gosto.
- pastaDeMusicas="$dispositivo/musicas"
- # Cria pasta de músicas na raíz do dispositivo, se ela não existir.
- mkdir -p "$pastaDeMusicas"
- # Verifica a quantidade de músicas contidas na pasta de música.
- # Como foi dito na lista brasileira de Shell Script, MP4 Shing-lings suportam uma quantidade limitada de mp3 em uma pasta.
- # No meu caso, o aparelho suporta 999 arquivos mp3. :)
- # Troquei a linha 'read quantidadeMP3 <<< $(ls "$pastaDeMusicas/*.mp3" | wc -l)' por essa abaixo.
- # Porque por algum motivo o ls parou de reconhecer "*.algumacoisa" como filtro, passando a tratá-lo como arquivo. Deve ser algo de nova versão. Não sei bem.
- read quantidadeMP3 <<< $(ls "$pastaDeMusicas" | grep -i "mp3" | wc -l)
- # Na linha abaixo, o subshell retorna o tamanho livre, em MB, do dispositivo - 100KB. Solucão encontrada para reservar 100KB para os arquivos de configuração do aparelho.
- read tamDispositivo <<< $(df | grep "$dispositivo" | sed -e "s/\([a-z0-9/]* *\)\{4\}[0-9a-zA-Z/% -]*/\1\/1024-0.1/" | bc -l | sed -e "s/\([0-9]*\.[0-9]\{3\}\)[0-9]*/\1/; s/\.//g");
- while read mp3; do
- # O subshell retorna somente o nome da música.mp3.
- # read musicaAtual <<< $(echo "$mp3" | sed -e "s/^\/[[:alpha:][:digit:][:punct:] ]*\/\([[:alpha:][:digit:][:punct:] ]*\.mp3\)/\1/")
- # Algum tempo depois, na própria lista de shell, eu vi um tópico tratando algo parecido. Vi que o basename fazia a mesma coisa que a linha de cima.
- # Não conhecia o raio do treco... Aí implementei. Acho que fica mais rápido assim.
- read musicaAtual <<< $(basename "$mp3")
- # Aqui o subshell retorna o tamanho em MB da música.mp3.
- read tamMP3 <<< $(stat -c "%s" "$mp3" | sed -e "s/[0-9]*/&\/1024\/1024/g" | bc -l | sed -e "s/\([0-9]*\.[0-9]\{3\}\)[0-9]*/\1/; s/\.//g");
- # O tamanho da música.mp3 é menor que o espaço restante no dispositivo?
- if [ $tamMP3 -lt $tamDispositivo ]; then
- # A música.mp3 já existe no dispositivo?
- if [ ! -f "$pastaDeMusicas/$musicaAtual" ]; then
- # A pasta de músicas contém menos que 999 músicas?
- if [ $quantidadeMP3 -lt 999 ]; then
- # Copia a música.
- cp "$mp3" "$pastaDeMusicas"
- # Calcula o espaço restante do dispositivo.
- let tamDispositivo=$tamDispositivo-$tamMP3
- # Adiciona +1 na quantidade de músicas
- let quantidadeMP3=$quantidadeMP3+1
- # Sleep 3: Tentativa de corrigir erro em que depois de copiada a música.mp3 o mp3gain não encontra. Acho que é algum atraso de cópia. Ainda estou testando.
- sleep 3
- # Normaliza a música.mp3 para volume de 89db sem que haja "pontos surdos".
- mp3gain -r -k "$pastaDeMusicas/$musicaAtual"
- else
- # Se houver mais de 999 músicas.
- msgErro=" Infelizmente houve o seguinte erro:\nO número máximo de arquivos foi atingido. Há 999 músicas.\n\nOperação cancelada."
- break
- fi
- fi
- else
- # Se a música.mp3 for maior que a capacidade do dispositivo, seta $capacidade e quebra o laço while.
- msgErro=" Infelizmente houve o seguinte erro:\nSeu dispositivo não possui espaço\nsuficiente para executar a cópia \ndo arquivo $musicaAtual e os demais.\n\nOperação cancelada."
- break
- fi
- # O subshel da linha abaixo, retorna uma lista dos arquivos de entrada; um por caminho linha.
- done <<< $(echo "$*" | sed -e "s/ \//\n\//g" | grep ".mp3")
- # Se a variável $msgErro possuir o conteúdo diferente de vazio, emite mensagem de erro.
- # Caso contrário, emite mensagem informando que o processo terminou com sucesso e chama a saída bem sucedida. :)
- [ -n "$msgErro" ] && erro "$msgErro" || zenity --info --title="Transferência finalizada!" --text=" Os arquivos selecionados foram\ntrasnferidos e normalizados com sucesso!"; exit 0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement