Advertisement
darsinqauros

Enviar para MP4 - v2

Nov 16th, 2011
138
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #!/bin/bash
  2.  
  3. # SCRIPT FEITO PARA SER USADO NAS AÇÕES PERSONALISADAS DO THUNAR.
  4. # SEGUNDA VERSÃO DEPOIS DE DISCUÇÃO EM LISTA DE SHELL SCRIPT
  5. # DEPENDE DO BASH, ZENITY E MP3GAIN
  6.  
  7. # Verifica se sexiste ao menos um arquivo de entrada.
  8. if [ ! -n "$1" ]; then
  9.     # Emite mensagem de erro, caso nada seja encontrado como parâmetro de entrada.
  10.     zenity --info --title="Erro!" --text="Falta o arquivo de entrada.\n\nNenhum processo realizado."
  11. else
  12.     arquivo="/home/$USER/.enviarParaMP4-pontoDeMontagem"
  13.     # Se o arquivo $arquivo existir, carrega seu conteúdo em $dispositivo.
  14.     [ -f "$arquivo" ]; read dispositivo < $arquivo
  15.     # Verifica que a variável $dispositovo possui qualquer coisa diferente de vazio.
  16.     if [ -n "$dispositivo" ]; then
  17.         # Verifica se o dispositivo está montado. Lembrando que sua pasta não é fixa no /media.
  18.         if [ -d "$dispositivo" ]; then
  19.             nok=""
  20.         else
  21.             nok="nok"
  22.             [ -f "$arquivo" ]; rm "$arquivo"
  23.         fi
  24.     else
  25.         nok="nok"
  26.         [ -f "$arquivo" ]; rm "$arquivo"
  27.     fi
  28.     # Se $dispositivo não foi caregada corretamente, ou a pasta de montagem do aparelho não foi encontrada, tenta encontrá-lo.
  29.     if [ "$nok" == "nok" ]; then
  30.         dispositivoSerial="觛迦烶觓∑ፉ倢獓穓㨓┖슷⑲"
  31.         # O subshel dessa linha retorna o número do dispositivo.
  32.         read dispositivo <<< $(find "/proc/scsi/usb-storage/" -type f -exec grep -l "$dispositivoSerial" {} \+ | awk -F '/' '{print "sd "$5}' | tail -n1)
  33.         # Verifica que a variável $dispositovo possui qualquer coisa diferente de vazio.
  34.         if [ -n "$dispositivo" ]; then
  35.             # O subshel dessa linha retorna o "device" do dispositivo.
  36.             read dispositivo <<< $(dmesg | grep -e "$dispositivo.*\[.*Attached" | sed -e 's/^.*\[//g ; s/\].*$//g' | tail -n1)
  37.             # Nessa linha o subshel retorna o ponto de montagem do dispositivo.
  38.             read dispositivo <<< $(mount | grep -i "$dispositivo" | awk '{print $3}')
  39.             # Verifica que a variável $dispositovo possui qualquer coisa diferente de vazio.
  40.             if [ -n "$dispositivo" ]; then
  41.                 echo $dispositivo>"$arquivo"
  42.             else
  43.                 # Se a variável $dispositivo estiver vazia, uma mensagem de erro é emitida.
  44.                 zenity --info --title="Erro!" --text="Infelizmente o dispositivo não foi encontrado."
  45.             fi
  46.         else
  47.             # Se a variável $dispositivo estiver vazia, uma mensagem de erro é emitida.
  48.             zenity --info --title="Erro!" --text="Infelizmente o dispositivo não foi encontrado."
  49.         fi
  50.     fi
  51.     # Torna a verificar se a variável $dispositivo contém o caminho de um diretório válido.
  52.     if [ -d "$dispositivo" ]; then
  53.         pastaDeMusicas="$dispositivo/musicas"
  54.         # Cria pasta de músicas na raíz do dispositivo, se ela não existir.
  55.         mkdir -p "$pastaDeMusicas"
  56.         read quantidadeMP3 <<< $(ls "$pastaDeMusicas/*.mp3" | wc -l)
  57.         # 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.
  58.             read tamDispositivo <<< $(df |w 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");
  59.         while read mp3; do
  60.             # O subshell retorna somente o nome da música.mp3.
  61.             read musicaAtual <<< $(echo "$mp3" | sed -e "s/^\/[[:alpha:][:digit:][:punct:] ]*\/\([[:alpha:][:digit:][:punct:] ]*\.mp3\)/\1/")
  62.             # Aqui o subshell retorna o tamanho em MB da música.mp3.
  63.             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");
  64.             # Calcula o tamanho restante do dispositivo.
  65.             let tamRestante=$tamDispositivo-$tamMP3
  66.             # O tamanho da música.mp3 é menor que o espaço restante no dispositivo?
  67.             if [ $tamMP3 -lt $tamRestante ]; then
  68.                 # A música.mp3 já existe no dispositivo?
  69.                 if [ ! -f "$pastaDeMusicas/$musicaAtual" ]; then
  70.                     # O a pasta de músicas contém menos que 999 músicas?
  71.                     if [ $quantidadeMP3 -lt 999 ]; then
  72.                         # Copia a música.
  73.                         cp "$mp3" "$pastaDeMusicas"
  74.                         # Adiciona +1 na quantidade de músicas
  75.                         let $quantidadeMP3=$quantidadeMP3+1
  76.                         # 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.
  77.                         sleep 3
  78.                         # Normaliza a música.mp3 para volume de 89db sem que haja "pontos surdos".
  79.                         mp3gain -r -k "$pastaDeMusicas/$musicaAtual"
  80.                     else
  81.                         # Se houver mais de 999 músicas.
  82.                         msgErro=" Infelizmente houve o seguinte erro:\nO número máximo de arquivos foi atingido. Há 999 músicas.\n\nOperação cancelada."
  83.                         break
  84.                     fi
  85.                 fi
  86.             else
  87.                 # Se a música.mp3 for maior que a capacidade do dispositivo, seta $capacidade e quebra o laço while.
  88.                 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."
  89.                 break
  90.             fi
  91.         # O subshel da linha abaixo, retorna uma lista dos arquivos de entrada; um por caminho linha.
  92.         done <<< $(echo "$*" | sed -e "s/ \//\n\//g" | grep ".mp3")
  93.         # Se a variável $capacidade possuir o conteúdo "capacidade", emite mensagem de erro. Caso contrário, emite mensagem que o processo foi concluído.
  94.         if [ -n "$msgErro" ]; then
  95.             zenity --info --title="Erro!" --text="$msnErro"
  96.         else
  97.             zenity --info --title="Transferência finalizada!" --text=" Os arquivos selecionados foram\ntrasnferidos e normalizados com sucesso!"
  98.         fi
  99.     fi
  100. fi
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement