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 |
5 | + | # DEPENDE DO BASH, ZENITY, BC, WC E MP3GAIN |
6 | ||
7 | - | # Verifica se sexiste ao menos um arquivo de entrada. |
7 | + | # Função auto explicativa. :) |
8 | - | if [ ! -n "$1" ]; then |
8 | + | erro() { |
9 | - | # Emite mensagem de erro, caso nada seja encontrado como parâmetro de entrada. |
9 | + | zenity --info --title "Erro!" --text "$1" |
10 | - | zenity --info --title="Erro!" --text="Falta o arquivo de entrada.\n\nNenhum processo realizado." |
10 | + | exit 1 |
11 | - | else |
11 | + | } |
12 | - | arquivo="/home/$USER/.enviarParaMP4-pontoDeMontagem" |
12 | + | |
13 | - | # Se o arquivo $arquivo existir, carrega seu conteúdo em $dispositivo. |
13 | + | # Verifica se foi passado ao menos um arquivo de entrada. |
14 | - | [ -f "$arquivo" ]; read dispositivo < $arquivo |
14 | + | [ -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." |
15 | - | # Verifica que a variável $dispositovo possui qualquer coisa diferente de vazio. |
15 | + | # Somente o serial do meu dispositivo MP4. Coloque aqui o seu. Não é necessário dizer que ele tem que estar correto, certo? :) |
16 | - | if [ -n "$dispositivo" ]; then |
16 | + | dispositivoSerial="觛迦烶觓∑ፉ倢獓穓㨓┖슷⑲" |
17 | - | # Verifica se o dispositivo está montado. Lembrando que sua pasta não é fixa no /media. |
17 | + | # O subshel dessa linha retorna o número do dispositivo. |
18 | - | if [ -d "$dispositivo" ]; then |
18 | + | read dispositivo <<< $(find "/proc/scsi/usb-storage/" -type f -exec grep -l "$dispositivoSerial" {} \+ | awk -F '/' '{print "sd "$5}' | tail -n1) |
19 | - | nok="" |
19 | + | # Verifica que a variável $dispositivo possui qualquer coisa diferente de vazio. |
20 | - | else |
20 | + | [ -n "$dispositivo" ] || erro "Infelizmente o dispositivo não foi encontrado. \n\nNenhuma ação tomada." |
21 | - | nok="nok" |
21 | + | # O subshel dessa linha retorna o "device" do dispositivo. |
22 | - | [ -f "$arquivo" ]; rm "$arquivo" |
22 | + | read dispositivo <<< $(dmesg | grep -e "$dispositivo.*\[.*Attached" | sed -e 's/^.*\[//g ; s/\].*$//g' | tail -n1) |
23 | # Nessa linha o subshel retorna o ponto de montagem do dispositivo. | |
24 | read dispositivo <<< $(mount | grep -i "$dispositivo" | awk '{print $3}') | |
25 | - | nok="nok" |
25 | + | # Verifica que a variável $dispositivo possui uma pasta de montagem válida. |
26 | - | [ -f "$arquivo" ]; rm "$arquivo" |
26 | + | [ -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." |
27 | # Variável que contém o caminho da pasta de músicas. Altere a seu gosto. | |
28 | - | # Se $dispositivo não foi caregada corretamente, ou a pasta de montagem do aparelho não foi encontrada, tenta encontrá-lo. |
28 | + | pastaDeMusicas="$dispositivo/musicas" |
29 | - | if [ "$nok" == "nok" ]; then |
29 | + | # Cria pasta de músicas na raíz do dispositivo, se ela não existir. |
30 | - | dispositivoSerial="觛迦烶觓∑ፉ倢獓穓㨓┖슷⑲" |
30 | + | mkdir -p "$pastaDeMusicas" |
31 | - | # O subshel dessa linha retorna o número do dispositivo. |
31 | + | # Verifica a quantidade de músicas contidas na pasta de música. |
32 | - | read dispositivo <<< $(find "/proc/scsi/usb-storage/" -type f -exec grep -l "$dispositivoSerial" {} \+ | awk -F '/' '{print "sd "$5}' | tail -n1) |
32 | + | # Como foi dito na lista brasileira de Shell Script, MP4 Shing-lings suportam uma quantidade limitada de mp3 em uma pasta. |
33 | - | # Verifica que a variável $dispositovo possui qualquer coisa diferente de vazio. |
33 | + | # No meu caso, o aparelho suporta 999 arquivos mp3. :) |
34 | - | if [ -n "$dispositivo" ]; then |
34 | + | # Troquei a linha 'read quantidadeMP3 <<< $(ls "$pastaDeMusicas/*.mp3" | wc -l)' por essa abaixo. |
35 | - | # O subshel dessa linha retorna o "device" do dispositivo. |
35 | + | # 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. |
36 | - | read dispositivo <<< $(dmesg | grep -e "$dispositivo.*\[.*Attached" | sed -e 's/^.*\[//g ; s/\].*$//g' | tail -n1) |
36 | + | read quantidadeMP3 <<< $(ls "$pastaDeMusicas" | grep -i "mp3" | wc -l) |
37 | - | # Nessa linha o subshel retorna o ponto de montagem do dispositivo. |
37 | + | # 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. |
38 | - | read dispositivo <<< $(mount | grep -i "$dispositivo" | awk '{print $3}') |
38 | + | 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"); |
39 | - | # Verifica que a variável $dispositovo possui qualquer coisa diferente de vazio. |
39 | + | |
40 | - | if [ -n "$dispositivo" ]; then |
40 | + | while read mp3; do |
41 | - | echo $dispositivo>"$arquivo" |
41 | + | # O subshell retorna somente o nome da música.mp3. |
42 | # read musicaAtual <<< $(echo "$mp3" | sed -e "s/^\/[[:alpha:][:digit:][:punct:] ]*\/\([[:alpha:][:digit:][:punct:] ]*\.mp3\)/\1/") | |
43 | - | # Se a variável $dispositivo estiver vazia, uma mensagem de erro é emitida. |
43 | + | # 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. |
44 | - | zenity --info --title="Erro!" --text="Infelizmente o dispositivo não foi encontrado." |
44 | + | # Não conhecia o raio do treco... Aí implementei. Acho que fica mais rápido assim. |
45 | read musicaAtual <<< $(basename "$mp3") | |
46 | - | else |
46 | + | # Aqui o subshell retorna o tamanho em MB da música.mp3. |
47 | - | # Se a variável $dispositivo estiver vazia, uma mensagem de erro é emitida. |
47 | + | 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"); |
48 | - | zenity --info --title="Erro!" --text="Infelizmente o dispositivo não foi encontrado." |
48 | + | # O tamanho da música.mp3 é menor que o espaço restante no dispositivo? |
49 | if [ $tamMP3 -lt $tamDispositivo ]; then | |
50 | # A música.mp3 já existe no dispositivo? | |
51 | - | # Torna a verificar se a variável $dispositivo contém o caminho de um diretório válido. |
51 | + | if [ ! -f "$pastaDeMusicas/$musicaAtual" ]; then |
52 | - | if [ -d "$dispositivo" ]; then |
52 | + | # A pasta de músicas contém menos que 999 músicas? |
53 | - | pastaDeMusicas="$dispositivo/musicas" |
53 | + | if [ $quantidadeMP3 -lt 999 ]; then |
54 | - | # Cria pasta de músicas na raíz do dispositivo, se ela não existir. |
54 | + | # Copia a música. |
55 | - | mkdir -p "$pastaDeMusicas" |
55 | + | cp "$mp3" "$pastaDeMusicas" |
56 | - | read quantidadeMP3 <<< $(ls "$pastaDeMusicas/*.mp3" | wc -l) |
56 | + | # Calcula o espaço restante do dispositivo. |
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. |
57 | + | let tamDispositivo=$tamDispositivo-$tamMP3 |
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"); |
58 | + | # Adiciona +1 na quantidade de músicas |
59 | - | while read mp3; do |
59 | + | let quantidadeMP3=$quantidadeMP3+1 |
60 | - | # O subshell retorna somente o nome da música.mp3. |
60 | + | # 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. |
61 | - | read musicaAtual <<< $(echo "$mp3" | sed -e "s/^\/[[:alpha:][:digit:][:punct:] ]*\/\([[:alpha:][:digit:][:punct:] ]*\.mp3\)/\1/") |
61 | + | sleep 3 |
62 | - | # Aqui o subshell retorna o tamanho em MB da música.mp3. |
62 | + | # Normaliza a música.mp3 para volume de 89db sem que haja "pontos surdos". |
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"); |
63 | + | mp3gain -r -k "$pastaDeMusicas/$musicaAtual" |
64 | - | # Calcula o tamanho restante do dispositivo. |
64 | + | |
65 | - | let tamRestante=$tamDispositivo-$tamMP3 |
65 | + | # Se houver mais de 999 músicas. |
66 | - | # O tamanho da música.mp3 é menor que o espaço restante no dispositivo? |
66 | + | msgErro=" Infelizmente houve o seguinte erro:\nO número máximo de arquivos foi atingido. Há 999 músicas.\n\nOperação cancelada." |
67 | - | if [ $tamMP3 -lt $tamRestante ]; then |
67 | + | |
68 | - | # A música.mp3 já existe no dispositivo? |
68 | + | |
69 | - | if [ ! -f "$pastaDeMusicas/$musicaAtual" ]; then |
69 | + | |
70 | - | # O a pasta de músicas contém menos que 999 músicas? |
70 | + | |
71 | - | if [ $quantidadeMP3 -lt 999 ]; then |
71 | + | # Se a música.mp3 for maior que a capacidade do dispositivo, seta $capacidade e quebra o laço while. |
72 | - | # Copia a música. |
72 | + | 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." |
73 | - | cp "$mp3" "$pastaDeMusicas" |
73 | + | break |
74 | - | # Adiciona +1 na quantidade de músicas |
74 | + | |
75 | - | let $quantidadeMP3=$quantidadeMP3+1 |
75 | + | # O subshel da linha abaixo, retorna uma lista dos arquivos de entrada; um por caminho linha. |
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. |
76 | + | done <<< $(echo "$*" | sed -e "s/ \//\n\//g" | grep ".mp3") |
77 | - | sleep 3 |
77 | + | # Se a variável $msgErro possuir o conteúdo diferente de vazio, emite mensagem de erro. |
78 | - | # Normaliza a música.mp3 para volume de 89db sem que haja "pontos surdos". |
78 | + | # Caso contrário, emite mensagem informando que o processo terminou com sucesso e chama a saída bem sucedida. :) |
79 | - | mp3gain -r -k "$pastaDeMusicas/$musicaAtual" |
79 | + | [ -n "$msgErro" ] && erro "$msgErro" || zenity --info --title="Transferência finalizada!" --text=" Os arquivos selecionados foram\ntrasnferidos e normalizados com sucesso!"; exit 0 |