Primeiramente, pra quem não sabe, Nautilus é o gerenciador de arquivos do gnome, conseqüentemente do Ubuntu.

Este pequeno grande texto surgiu da necessidade de redimensionar umas fotos da minha câmera digital que eu queria enviar para uns amigos. Então comecei a procurar por algum programa que fizesse o trabalho sujo, já sabendo que isso poderia ser feito facilmente pela linha de comando utilizando o ImageMagick. Conheces o ImageMagick ? Não ? É simplesmente um pacote de ferramentas para dar nó em pingo d’água no que se refere a manipulação de imagens e tudo isso por linha de comando.

Mas a minha idéia era ter algo gráfico, algo que eu não precisasse abrir um shell e executar um script. Então vi que é possível criar scripts que podem interagir diretamente com o Nautilus. Para tanto basta que você crie o seu shell script normalmente colocando o mesmo dentro do diretório ~/.gnome2/nautilus-scripts. Ah! Um detalhe. O script não pode começar com #!/bin/bash. Então sabendo disso comecei a pensar em como adaptar o meu script que usa o ImageMagick para um que funcionasse interativamente.


Neste momento uma pequena pausa para entender como seria um script simples que redimensionasse todas as imagens de um diretório.

#!/bin/bash
for arquivo in $(ls *.jpg)
do
convert -resize 50 $arquivo redimensionada_$arquivo
done

Este pequeno script irá usar o comando convert (que é parte do Imagemagick) passando para ele o valor de 5o% indicando que a imagem deve ser reduzida pela metade.

Como estamos querendo fazer algo que funcione diretamente no ambiente gráfico não teria sentido deixarmos fixo o quanto a imagem deve ser reduzida, o prefixo que vamos colocar nas imagens redimensionadas e também, por exemplo, o diretório onde elas serão guardadas. Então pesquisando um pouco descobri o pacote Zenity. Este pacote oferece uma ferramenta que permite você criar quadros de diálogos diretamente do shell. Como exemplo do que usaremos temos :

zenity –title ‘Redimensionar’ –entry –text ‘Digite um valor’

O comando acima cria uma caixa de diálogo onde será pedido um valor. Este valor é retornado na saída padrão. Ai me bati para descobrir como capturar este valor e colocar em uma variável. Vale lembrar que não sou nenhum cobra em programação shell script. Então encontrei. Basta fazer :

variavel=$(zenity –title ‘Redimensionar’ –entry –text ‘Digite um valor’)

Outra capacidade do Zenity é criar janelas de progresso.

zenity –progress –pulsate –text “Aguarde processando…” –auto-close

O comando acima cria uma caixa de diálogo que mostra o processamento de um determinado loop, comando, etc. Para que ele funcione é necessário que se passe o resultado do processamento do comando ou loop via pipe para o Zenity. Exemplo:

find $HOME -name ’*.ps’ | zenity –progress –pulsate

Agora só falta saber como é que saberemos, no nosso script, quais foram os arquivos selecionados pelo usuário. Isso é obtido através da variável especial $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS.

Por fim, agora é meter a mão na massa e fazer o script. Lembrando que, o nome que você der ao arquivo do script será o que vai aparecer no menu do Nautilus. No meu caso eu dei o nome : redimensionar fotos.

Eis o script completo:

valor=$(zenity --title 'Redimensionar' --entry --text 'Digite o valor em % a redimensionar')
[ $? -ne 0 ] && exit

prefix=$(zenity --title 'Redimensionar' --entry --text 'Digite,se desejar, um prefixo para as imagens redimensionadas')
[ $? -ne 0 ] && exit

diretorio=$(zenity --title 'Redimensionar' --entry --text 'Digite o diretório de destino')
[ $? -ne 0 ] && exit

mkdir $diretorio

for arquivoatual in $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS; do
    arquivo=${arquivoatual#`dirname $arquivoatual`/}
    convert -resize $valor% $arquivoatual $diretorio/$prefix$arquivo 2> erro
done | zenity --progress --pulsate --text "Aguarde processando..." --auto-close

Agora toda vez que quiser redimensionar algumas fotos basta selecioná-las, clicar com o botão direito, e escolher : scripts->redimensionar fotos.

Script em FuncionamentoScript em Execução - Janela 1Script em Execução - Janela 2Script em Execução - Janela 3

E é só, espero que gostem e apreciem o poder do mundo Linux. E tudo feito sem gastar um tostão. :) :)

Inté a próxima