DESAFIO: Portar Script zenity, Xdialog, dialog e sh

1. DESAFIO: Portar Script zenity, Xdialog, dialog e sh

Geraldo Albuquerque
AprendiNoLinux

(usa Ubuntu)

Enviado em 25/05/2012 - 11:09h

Faz tempo que pesquisando sobre dúvidas em comandos eu encontro este script: http://www.vivaolinux.com.br/artigo/Script-com-muitas-utilidades-para-arquivos-e-pastas/ do @alexandregms
porque ele é na verdade um utilitário.

Será que é muito difícil portar ele para trabalhar ao mesmo tempo em sh bash, zenity, Xdialog (que não consigo instalar e testar no Ubuntu), dialog ( que reinstalei) ou outros ?

Qual a ideia básica, RoadMap

1 - Colocar algum configurador padrão tipo preferencias (escolher um padrão, zenity, Xdialog, dialog , sh)
2 - Se não escolher o padrão testar quais a máquina tem disponível.
3 - Salvar arquivo config após saber a opção que o usuário escolheu.
4 - Mesmo tendo a opção salva das preferências, testar para saber se realmente tem o danado trabalhando.

Sugestões ?



#!/bin/bash

#
##### DESENVOLVIDO POR ALEXANDRE MONTEIRO: alexandregms2@gmail.com
#
## SCRIPT PARA UTILIDADES EM ARQUIVOS E/OU PASTAS
## PARA UM DESKTOP PESSOAL: TRABALHAR COM IMAGENS, MUSICAS, VÍDEOS, ETC
## PARA UM AMBIENTE CORPORATIVO: TRABALHAR COM LOGS, BACKUP's, ETC
#

#r1="/tmp/resp1.tmp"
#r2="/tmp/resp2.tmp"
#r3="/tmp/resp3.tmp"

###### PASTAS VIRAR MAIÚSCULAS ######

PASTAS_VIRAR_MAIUSCULAS()
{
#Xdialog --msgbox "NA TELA SEGUINTE SELECIONE O DIRETÓRIO EM QUE \n SE DESEJA TRANSFORMAR TODAS AS PASTAS EM MAIÚSCULO" 10 70
resp1=$(zenity --text "SELECIONE O DIRETÓRIO EM QUE SE DESEJA TRANSFORMAR TODAS AS PASTAS EM MAIÚSCULO" --entry --title "Informe" " ");
#Xdialog --dselect ./ 30 75 2> $r1
#resp1=`cat $r1`
if [ -z $resp1 ]
then
#Xdialog --msgbox "DEVE-SE ESCOLHER A PASTA" 5 40
zenity --error --title "Error" --text="DEVE-SE ESCOLHER A PASTA"
else
cd $resp1
find * -maxdepth 0 -type d | while read dir
do
novo_nome=`echo $dir | tr 'a-z' 'A-Z'`
mv "$dir" "$novo_nome" 2> /dev/null
done
#Xdialog --msgbox "AS PASTAS DO DIRETÓRIO\n $resp1 \n FORAM TRANSFORMADAS EM MAIÚSCULAS" 10 70
zenity --info --text "AS PASTAS DO DIRETÓRIO\n $resp1 \nFORAM TRANSFORMADAS EM MAIÚSCULAS" --title="Operacao concluída"
fi
#rm $r1
MENU
}

##### PASTAS VIRAR MINÚSCULAS #####

PASTAS_VIRAR_MINUSCULAS()
{
#Xdialog --msgbox "NA TELA SEGUINTE SELECIONE O DIRETÓRIO EM QUE \n SE DESEJA TRANSFORMAR TODAS AS PASTAS EM MINÚSCULO" 10 70
#Xdialog --dselect ./ 30 75 2> $r1
#resp1=`cat $r1`
resp1=$(zenity --title "Informe o Diretorio" --entry --text "SELECIONE O DIRETÓRIO EM QUE SE DESEJA TRANSFORMAR TODAS AS PASTAS EM MINÚSCULO");
if [ -z $resp1 ]
then
#Xdialog --msgbox "DEVE-SE ESCOLHER A PASTA" 5 40
zenity --error --title "Error" --text="DEVE-SE ESCOLHER A PASTA"
else
cd $resp1
find * -maxdepth 0 -type d | while read dir
do
novo_nome=`echo $dir | tr 'A-Z' 'a-z'`
mv "$dir" "$novo_nome" 2> /dev/null
done
#Xdialog --msgbox "AS PASTAS DO DIRETÓRIO\n $resp1 \n FORAM TRANSFORMADAS EM MINÚSCULAS" 10 70
zenity --info --title "Concluido" --text="AS PASTAS DO DIRETÓRIO\n $resp1 \nFORAM TRANSFORMADAS EM MINÚSCULAS"
fi
#rm $r1
MENU
}


###### ARQUIVOS VIRAR MAIÚSCULOS ######

ARQUIVOS_VIRAR_MAIUSCULOS()
{
#Xdialog --msgbox "NA TELA SEGUINTE SELECIONE O DIRETÓRIO EM QUE \n SE DESEJA TRANSFORMAR OS ARQUIVOS EM MAIÚSCULOS" 10 70
#Xdialog --dselect ./ 30 75 2> $r1
#resp1=`cat $r1`
resp1=$(zenity --title "Informe o Diretorio" --entry --text "SELECIONE O DIRETÓRIO EM QUE SE DESEJA TRANSFORMAR OS ARQUIVOS EM MAIÚSCULOS");
if [ -z $resp1 ]
then
#Xdialog --msgbox "DEVE-SE ESCOLHER A PASTA" 5 40]
zenity --error --title "Error" --text="DEVE-SE ESCOLHER A PASTA"
else
cd $resp1
find * -maxdepth 0 -type f | while read dir
do
novo_nome=`echo $dir | tr 'a-z' 'A-Z'`
mv "$dir" "$novo_nome" 2> /dev/null
done
#Xdialog --msgbox "OS ARQUIVOS DA PASTA\n $resp1 \n FORAM TRANSFORMADOS EM MAIÚSCULOS" 10 70
zenity --info --title "Concluido" --text="OS ARQUIVOS DA PASTA\n $resp1 \nFORAM TRANSFORMADOS EM MAIÚSCULOS"
fi
#rm $r1
MENU
}

##### ARQUIVOS VIRAR MINÚSCULOS #####

ARQUIVOS_VIRAR_MINUSCULOS()
{
#Xdialog --msgbox "NA TELA SEGUINTE SELECIONE O DIRETÓRIO EM QUE \n SE DESEJA TRANSFORMAR OS ARQUIVOS EM MINÚSCULOS" 10 70
#Xdialog --dselect ./ 30 75 2> $r1
#resp1=`cat $r1`
resp1=$(zenity --title "Informe o Diretorio" --entry --text "SELECIONE O DIRETÓRIO EM QUE \n SE DESEJA TRANSFORMAR OS ARQUIVOS EM MINÚSCULOS");
if [ -z $resp1 ]
then
#Xdialog --msgbox "DEVE-SE ESCOLHER A PASTA" 5 40
zenity --error --title "Error" --text="DEVE-SE ESCOLHER A PASTA"
else
cd $resp1
find * -maxdepth 0 -type f | while read dir
do
novo_nome=`echo $dir | tr 'A-Z' 'a-z'`
mv "$dir" "$novo_nome" 2> /dev/null
done
#Xdialog --msgbox "OS ARQUIVOS DA PASTA\n $resp1 \n FORAM TRANSFORMADOS EM MINÚSCULOS" 10 70
zenity --info --title "Concluido" --text="OS ARQUIVOS DA PASTA\n $resp1 \nFORAM TRANSFORMADOS EM MINÚSCULOS"
fi
#rm $r1
MENU
}

##### ESPAÇO RETIRAR #####

ESPACO_RETIRAR()
{
#Xdialog --msgbox "NA TELA SEGUINTE SELECIONE O DIRETÓRIO EM QUE OS \n ESPAÇOS DA PASTA E ARQUIVOS\n SERÃO SUBSTITUÍDOS POR '_'" 10 70
#Xdialog --dselect ./ 30 75 2> $r1
#resp1=`cat $r1`
resp1=$(zenity --title "Informe o Diretorio" --entry --text "SELECIONE O DIRETÓRIO EM QUE OS \nESPAÇOS DA PASTA E ARQUIVOS\nSERÃO SUBSTITUÍDOS POR '_'");
if [ ! -z $resp1 ]
then
cd $resp1
find * -maxdepth 0 -name '*' | while read pasta
do
new_name=`echo $pasta | sed 's/ /_/g'`
mv "$pasta" "$new_name" 2> /dev/null
done
#Xdialog --msgbox "OS ESPAÇOS DO DIRETÓRIO\n $resp1 \n FORAM SUBSTITUÍDOS POR '_'" 10 70
zenity --info --title "Concluido" --text="OS ESPAÇOS DO DIRETÓRIO\n $resp1 \nFORAM SUBSTITUÍDOS POR '_'"
else
#Xdialog --msgbox "ABORTANDO O SCRIPT" 5 30
zenity --info --title "Cancelado" --text="ABORTANDO O SCRIPT"
fi
#rm $r1
MENU
}

##### RENOMEAR #####

RENOMEAR()
{
#Xdialog --msgbox "NA TELA SEGUINTE SELECIONE A PASTA ONDE ESTÃO OS ARQUIVOS" 5 65
#Xdialog --dselect ./ 30 75 2> $r1
#resp1=`cat $r1`
resp1=$(zenity --title "Informe o Diretorio" --entry --text "SELECIONE A PASTA ONDE ESTÃO OS ARQUIVOS");
extensoes=`
for file in $resp1*
do
echo ${file##*.}
done | sort | uniq`

#Xdialog --inputbox "QUAL EXTENSÃO VOCÊ DESEJA RENOMEAR?\n CONSIDERE MAIÚSCULAS E MINÚSCULAS \n\n$extensões" 20 60 2> $r2
resp2=$(zenity --title "Informe a extensão" --entry --text "QUAL EXTENSÃO VOCÊ DESEJA RENOMEAR?\n CONSIDERE MAIÚSCULAS E MINÚSCULAS \n\n$extensoes");
#resp2=`cat $r2`
#Xdialog --yesno "NA TELA SEGUINTE VOCÊ IRA DIGITAR O NOVO NOME DOS ARQUIVOS, \n POREM NÃO ESCOLHA O MESMO NOME QUE JÁ EXISTA NA PASTA,\n POIS VOCÊ PODERÁ PERDER ALGUNS ARQUIVOS. \n DESEJA CONTINUAR?" 15 70
zenity --question --text="DIGITAR O NOVO NOME DOS ARQUIVOS, PORÉM NÃO ESCOLHA O MESMO NOME QUE JÁ EXISTA NA PASTA, POIS VOCÊ PODERÁ PERDER ALGUNS ARQUIVOS.\nDESEJA CONTINUAR?"
if [ "$?" = "0" ]
then
#Xdialog --inputbox "DIGITE O NOVO NOME DOS ARQUIVOS" 10 40 2> $r3
#resp3=`cat $r3`
resp3=$(zenity --title "Informe" --entry --text "DIGITE O NOVO NOME DOS ARQUIVOS");
i=0
cd $resp1
if [ -z $resp1 ] || [ -z $resp2 ] || [ -z $resp3 ]
then
#Xdialog --msgbox "DEVE-SE DIGITAR O NOVO NOME" 5 40
zenity --error --title "Error" --text="DEVE-SE PREENCHER TODOS OS CAMPOS"
else
arquivos=`ls -trC1 *.$resp2`
for j in $arquivos
do
echo "RENOMEANDO $j PARA $resp3\_$i.$resp2"
mv $j $resp3\_$i.$resp2 2> /dev/null
i=`expr $i + 1`
done
#Xdialog --msgbox "OS ARQUIVOS COM EXTENSÃO *.$resp2 DA PASTA:\n $resp1 \n FORAM RENOMEADOS COM SUCESSO" 10 70
zenity --info --title "Concluido" --text="OS ARQUIVOS COM EXTENSÃO *.$resp2 DA PASTA:\n $resp1 \nFORAM RENOMEADOS COM SUCESSO"
fi
fi
#rm $r1 $r2 $r3
MENU
}

##### MENU #####

MENU()
{
operacao=$(zenity --entry --text "Menu\n
1. TRANSFORMAR PASTAS EM MAIÚSCULAS\n
2. TRANSFORMAR PASTAS EM MINÚSCULAS\n
3. TRANSFORMAR ARQUIVOS EM MAIÚSCULOS\n
4. TRANSFORMAR ARQUIVOS EM MINÚSCULOS\n
5. RETIRAR ESPAÇO DE ARQUIVOS E PASTAS\n
6. RENOMEAR\n
7. SAIR" --title "Menu Principal")

case $operacao in
1) PASTAS_VIRAR_MAIUSCULAS
;;
2) PASTAS_VIRAR_MINUSCULAS
;;
3) ARQUIVOS_VIRAR_MAIUSCULOS
;;
4) ARQUIVOS_VIRAR_MINUSCULOS
;;
5) ESPACO_RETIRAR
;;
6) RENOMEAR
;;
7) zenity --info --title "Exit" --text="Terminando a execução do script"

;;
*) zenity --info --title "Exit" --text="Terminando a execução do script"
;;
esac
}
MENU




  


2. Re: DESAFIO: Portar Script zenity, Xdialog, dialog e sh

Alexandre Gonçalves Monteiro da Silva
alexandregms

(usa Ubuntu)

Enviado em 25/05/2012 - 12:51h

Grande @AprendiNoLinux! eu tb uso bastante este script, sempre quebra meus galhos pra organização das minhas fotos, musicas, filmes etc.
Ótima a sua idéia, parabéns!
Eu estou tentando fazê-lo em YAD, pois gostei demais da interface! Se alguém contribuir para sua idéia seria ideal!
Gostei de saber que vc usa bastante este script, é ótimo saber que algo que criamos e disponibilizamos voluntariamente está sendo útil! :-)




3. Re: DESAFIO: Portar Script zenity, Xdialog, dialog e sh

Geraldo Albuquerque
AprendiNoLinux

(usa Ubuntu)

Enviado em 25/05/2012 - 14:01h

alexandregms escreveu:

Grande @AprendiNoLinux! eu tb uso bastante este script, sempre quebra meus galhos pra organização das minhas fotos, musicas, filmes etc.
Ótima a sua idéia, parabéns!
Eu estou tentando fazê-lo em YAD, pois gostei demais da interface! Se alguém contribuir para sua idéia seria ideal!
Gostei de saber que vc usa bastante este script, é ótimo saber que algo que criamos e disponibilizamos voluntariamente está sendo útil! :-)



Útil é apelido rsrs.
Vamos tentar fazer assim. Você vai gerando a versão YAD e se deixar, vou integrando nas classes que vou criar para separar a interface, comandos e dados. Se tiver alguma dica extra mande ai ;)

Também vou instalar o YAD para te acompanhar e testar.



4. Re: DESAFIO: Portar Script zenity, Xdialog, dialog e sh

Geraldo Albuquerque
AprendiNoLinux

(usa Ubuntu)

Enviado em 25/05/2012 - 21:53h

Todos instalados no Ubuntu 12.04

yad instalado....
dialog instalado...
zenity instalado...
xdialog não localizado...
gdialog não localizado...
kdialog não localizado...
whiptail instalado...

Existe algum outro wraper para shell script além dos citados ?

START iniciado para portar o script.

1ª fase: Separar as camadas visuais dos comandos e instruções que recebem dados.

Editado: 21:56

Ajudem a batizar o nome do rebento. Codinome provisório util2.sh O nome mais votado será usado no script.



5. Re: DESAFIO: Portar Script zenity, Xdialog, dialog e sh

Raimundo Alves Portela
rai3mb

(usa Outra)

Enviado em 26/05/2012 - 03:40h

Com o Yad vai ficar show!

Ajudo no que puder, estou meio afastado por causa da minha pós, mas já tem uma boa ajuda aqui: http://www.vivaolinux.com.br/artigo/Yad-016-Eu-quero-sempre-mais-de-ti/

Não mudou quase nada da versão 0.16 pra 0.17 (atual) ;-)


6. Re: DESAFIO: Portar Script zenity, Xdialog, dialog e sh

Alexandre Gonçalves Monteiro da Silva
alexandregms

(usa Ubuntu)

Enviado em 30/05/2012 - 20:42h

Tambem estou afastado por causa de alguns cursos que estou fazendo.
Alem disso estou criando uma nova apostila para o curso que leciono de ShellScript. Seria um "modulo 2", do qual focarei em funcoes e interface grafica. Pensei em utilizar o YAD, mas como a maioria dos alunos atua com servidores sem interface grafica, entao estou fazendo tudo em dialog, que ja eh um padrao em praticamente todas as distros!






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts