SHOW:
|
|
- or go back to the newest paste.
| 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 | - | if [ -n "$1" ]; then |
| 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 | - | # VERIFICA SE O ARQUIVO DE PONTO DE MONTAGEM EXISTE. |
| 10 | + | zenity --info --title="Erro!" --text="Falta o arquivo de entrada.\n\nNenhum processo realizado." |
| 11 | - | if [ -f "$arquivo" ]; then |
| 11 | + | |
| 12 | - | pontoDeMontagem=$(cat "$arquivo") |
| 12 | + | |
| 13 | # Se o arquivo $arquivo existir, carrega seu conteúdo em $dispositivo. | |
| 14 | - | # ----------------------------------------------- |
| 14 | + | [ -f "$arquivo" ]; read dispositivo < $arquivo |
| 15 | # Verifica que a variável $dispositovo possui qualquer coisa diferente de vazio. | |
| 16 | - | # VERIFICA SE O MP4 ESTÁ MONTADO. |
| 16 | + | if [ -n "$dispositivo" ]; then |
| 17 | - | if [ -n "$pontoDeMontagem" ]; then |
| 17 | + | # Verifica se o dispositivo está montado. Lembrando que sua pasta não é fixa no /media. |
| 18 | - | if [ -d "$pontoDeMontagem" ]; then |
| 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 | - | # ----------------------------------------------- |
| 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 | - | # SE NÃO HOUVER O PONTO DE MONTAGEM SALVA NO $ARQUIVO. |
| 30 | + | dispositivoSerial="觛迦烶觓∑ፉ倢獓穓㨓┖슷⑲" |
| 31 | # O subshel dessa linha retorna o número do dispositivo. | |
| 32 | - | # Os nomes do seu dispositivo pode ser verificado através do "dmesg | grep -i scsi" |
| 32 | + | read dispositivo <<< $(find "/proc/scsi/usb-storage/" -type f -exec grep -l "$dispositivoSerial" {} \+ | awk -F '/' '{print "sd "$5}' | tail -n1)
|
| 33 | - | nome1MP4="ACTIONS HS USB FlashDisk 2.00 PQ: 0 ANSI: 0 CCS" |
| 33 | + | # Verifica que a variável $dispositovo possui qualquer coisa diferente de vazio. |
| 34 | - | nome2MP4="Attached SCSI removable disk" |
| 34 | + | if [ -n "$dispositivo" ]; then |
| 35 | - | # --------------------------------------------------------------------------------- |
| 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 | - | dispositivo="/home/$USER/.dispositivo" |
| 37 | + | # Nessa linha o subshel retorna o ponto de montagem do dispositivo. |
| 38 | - | # A linha abaixo pode ser comentada se você não quiser tempo para verificar se o MP4 está montado. |
| 38 | + | read dispositivo <<< $(mount | grep -i "$dispositivo" | awk '{print $3}')
|
| 39 | - | # zenity --info --title="Aviso!" --text=" Por favor,\nantes de continuar,\nconfira se o MP4 está devidamente montado.\n Grato." |
| 39 | + | # Verifica que a variável $dispositovo possui qualquer coisa diferente de vazio. |
| 40 | - | # --------------------------------------------------------------------------------- |
| 40 | + | if [ -n "$dispositivo" ]; then |
| 41 | - | numeroDoDispositivo=$(dmesg | grep -i "$nome1MP4" | sed -e "s/^.\{20\}\([0-9:]\{8\}\).*/\1/" | tail -n1)
|
| 41 | + | echo $dispositivo>"$arquivo" |
| 42 | - | if [ -n "$numeroDoDispositivo" ]; then |
| 42 | + | |
| 43 | - | dmesg | grep -i "$numeroDoDispositivo" | grep -i "$nome2MP4" | sed -e "s/^.\{28\}\([a-z]\{3\}\).*/\1/" | tail -n1 >"$dispositivo"
|
| 43 | + | # Se a variável $dispositivo estiver vazia, uma mensagem de erro é emitida. |
| 44 | - | pontoDeMontagem=$(mount | grep -i "`cat /home/$USER/.dispositivo`" | sed -e "s/^.\{12\}\([0-9a-zA-Z/ -]*\) type.*/\1/")
|
| 44 | + | |
| 45 | - | if [ -n "$pontoDeMontagem" ]; then |
| 45 | + | |
| 46 | - | echo $pontoDeMontagem>"$arquivo" |
| 46 | + | |
| 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 | - | rm "$dispositivo" |
| 50 | + | |
| 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 | - | # ----------------------------------------------- |
| 55 | + | mkdir -p "$pastaDeMusicas" |
| 56 | read quantidadeMP3 <<< $(ls "$pastaDeMusicas/*.mp3" | wc -l) | |
| 57 | - | if [ -d "$pontoDeMontagem" ]; then |
| 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 | - | listaParaTransferir="/home/$USER/.listaParaTransferir" |
| 59 | + | |
| 60 | # O subshell retorna somente o nome da música.mp3. | |
| 61 | - | # CRIA A LISTA DE ARQUIVOS A TRANSFERIR. |
| 61 | + | read musicaAtual <<< $(echo "$mp3" | sed -e "s/^\/[[:alpha:][:digit:][:punct:] ]*\/\([[:alpha:][:digit:][:punct:] ]*\.mp3\)/\1/") |
| 62 | - | # echo "$*" | sed -e "s/\.mp3 /\.mp3\n/g">>"$listaParaTransferir" |
| 62 | + | # Aqui o subshell retorna o tamanho em MB da música.mp3. |
| 63 | - | echo "$*" | sed -e "s/ \//\n\//g" | grep ".mp3">>"$listaParaTransferir" |
| 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 | - | # ----------------------------------------------- |
| 64 | + | # Calcula o tamanho restante do dispositivo. |
| 65 | let tamRestante=$tamDispositivo-$tamMP3 | |
| 66 | - | # CRIA O DIRETÓRIO DE MÚSICAS NO MP4, SE ELE NÃO EXISTIR. |
| 66 | + | # O tamanho da música.mp3 é menor que o espaço restante no dispositivo? |
| 67 | - | mkdir -p "$pontoDeMontagem/musicas" |
| 67 | + | if [ $tamMP3 -lt $tamRestante ]; then |
| 68 | - | # ----------------------------------------------- |
| 68 | + | # A música.mp3 já existe no dispositivo? |
| 69 | if [ ! -f "$pastaDeMusicas/$musicaAtual" ]; then | |
| 70 | - | # COPIA AS MÚSICAS PARA O MP4 E REALIZA A NORMALIZAÇÃO DE VOLUME COM O MP3GAIN |
| 70 | + | # O a pasta de músicas contém menos que 999 músicas? |
| 71 | if [ $quantidadeMP3 -lt 999 ]; then | |
| 72 | - | musicaAtual=$(echo "$mp3" | sed -e "s/^\/[[:alpha:][:digit:][:punct:] ]*\/\([[:alpha:][:digit:][:punct:] ]*\.mp3\)/\1/") |
| 72 | + | # Copia a música. |
| 73 | - | if [ ! -f "$pontoDeMontagem/musicas/$musicaAtual" ]; then |
| 73 | + | cp "$mp3" "$pastaDeMusicas" |
| 74 | - | [ ! -f "$mp3" ]; cp "$mp3" "$pontoDeMontagem/musicas" |
| 74 | + | # Adiciona +1 na quantidade de músicas |
| 75 | - | mp3gain -r -k "$pontoDeMontagem/musicas/$musicaAtual" |
| 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 | - | done < "$listaParaTransferir" |
| 77 | + | sleep 3 |
| 78 | - | # ----------------------------------------------- |
| 78 | + | # Normaliza a música.mp3 para volume de 89db sem que haja "pontos surdos". |
| 79 | mp3gain -r -k "$pastaDeMusicas/$musicaAtual" | |
| 80 | - | # REMOVE A LISTA DE TRANSFERÊNCIA. |
| 80 | + | else |
| 81 | - | rm "$listaParaTransferir" |
| 81 | + | # Se houver mais de 999 músicas. |
| 82 | - | # ----------------------------------------------- |
| 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 | - | # AVISA QUE O PROCESSO FOI CONCLUÍDO COM SUCESSO. |
| 84 | + | fi |
| 85 | - | zenity --info --title="Transferência finalizada!" --text=" Os arquivos selecionados foram\ntrasnferidos e normalizados com sucesso!" |
| 85 | + | fi |
| 86 | - | # ----------------------------------------------- |
| 86 | + | |
| 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 | - | # SE NÃO HOUVER ARQUIVO DE ENTRADA, AVISA. |
| 89 | + | break |
| 90 | - | zenity --info --title="Erro!" --text="Falta o arquivo de entrada." |
| 90 | + | |
| 91 | - | # ----------------------------------------------- |
| 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 |