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 |