View difference between Paste ID: DLKipbzv and XMYX6bAR
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