Estendendo o poder de trabalho do Nautilus

O gerenciador de arquivos do Gnome é bem tosco … ops básico. Mas ele possui um recurso que eu gosto muito que é a capacidade de agregar funções através de scripts em qualquer linguagem que você queira apenas observando meia dúzia de variáveis de ambiente e em alguns casos até sem usá-las.

Claro que quando digo simples estou considerando que para você, escrever scripts em qualquer linguagem de programação – em especial shell-script – seja algo simples.

Como funciona (A teoria)

Vamos supor que você eventualmente precise executar uma determinada sequência de comandos especiais sobre alguns arquivos. Ao invés de abrir o terminal e digitá-los você poderia criar um script para isso e agregar ao menu de scripts do Nautilus. Da próxima vez que precisar deles bastará clicar sobre o arquivo com o botão direito do mouse, e no menu scripts escolher o seu script apropriado.

Não ficou claro? Pense o seguinte exemplo: Eu sempre faço downloads de arquivos de vídeo e música cujo os nomes estão com letras maiúsculas e minusculas tudo misturado, mas eu prefiro que estejam sempre em minúsculas. Se eu souber como fazer isto pela linha de comandos, então será moleza criar um script para automatizar a tarefa.

Da mesma forma eu poderia ter um script para converter para maiúsculas, outro para realizar o backup incremental de uma pasta, outro monitorar alterações no arquivo, para redimensionar fotos, ainda enviar para um servidor FTP remoto, ou mesmo calcular um HASH MD5 etc etc.

Em fim, qualquer tarefa que envolva arquivos e diretórios e que podem ser feitas pela linha de comandos podem também ser automatizadas e agregadas ao Nautilus, precise ela de interação do usuário, ou não.

Como fazer  (A prática)

O Nautilus agrega ao menu de scripts qualquer arquivo que tenha permissão de execução e que esteja na pasta de scripts do seu usuário. Esta pasta geralmente é  “.gnome2/nautilus-scripts”, no seu diretório home (se esta pasta não existir você pode criá-la sem problemas).

Então basta criar um arquivo com seu editor de textos favoritos, ou uma aplicação complexa do jeito que você quiser e salvar, ou por um link nesta pasta que o seu usuário podera executá-la clicando com o botão direito do mouse e escolhendo-a a partir da seção scripts que estará disponivel neste menu.

Para ficar mais amigável, você pode criar os arquivos sem extensão, já que esta parte do nome de um arquivo é algo desnecessário no ambiente posix, como é o caso do Linux.

Exemplo 1 –  Abrir o terminal na pasta que o Nautilus está exibindo

Se há uma tarefa que costumo fazer com bastante frequência é abrir o terminal – mesmo possuindo alguns scripts para facilitar minha vida, devido a natureza do meu trabalho isso se torna essencial. Imagine por exemplo que após baixar um arquivo compactado, por exemplo, eu o descompacto e quero entrar no seu diretório via linha de comandos para executar alguma operação, tal como um “./configure && make && make install” por exemplo.

Essa tarefa que deveria ser tão simples torna-se irritantemente chata quando o arquivo descompactado cria uma estrutura de pastas muito grande, já que ao clicar em um atalho para abrir o terminal do Gnome esta aplicação é aberta no meu diretório home e dali eu tenho que digitar o comando cd ao menos uma vez para chegar até a pasta onde quero. Seria muito mais interessante se tivesse um meio de abrir o terminal no diretório que eu estou vendo no Nautilus, de onde basta dar duplo clique para entrar, não acham?

Isso é possível com um script muito, mas muito simples mesmo, então este será o nosso o primeiro exemplo. Apenas crie um arquivo pelo seu editor de textos favoritos com o nome “Abrir terminal aqui” (como já disse não precisa ter extensão). O conteúdo deste arquivo será apenas isso:

#!/bin/bash
gnome-terminal

Feito isto salve-o em algum lugar, de a ele permissão de execução e em seguida mova-o para a pasta de scripts do seu usuário que geralmente é em “.gnome2/nautilus-scripts”, no seu diretório home (só pra enfatizar, vou repetir, se esta pasta não existir você pode criá-la sem problemas).

Agora experimente abrir o Nautilus, ir até alguma pasta de sua escolha e ao clicar com o botão direito sobre uma área vazia desta pasta e escolher a opção “Scripts” você terá disponível a opção “Abrir terminal Aqui” a qual permitirá abrir um terminal com apenas mais um clique.

Exemplo 2 – Baixando um arquivo na pasta que o Nautilus está exibindo

Um script muito fácil e útil também que costumo usar é composto por duas linhas simples como mostrado abaixo.

#!/bin/bash
URL=$(zenity --entry --text "Informe a URL do arquivo a ser baixado")
wget "${URL}"

Salve o arquivo com um nome sugestivo na pasta  de scripts (“Baixar com o Wget aqui”, por exemplo), dê permissão de execução e está feito.

Toda vez que você invocar este script a partir do menu scripts do Nautilus, uma pequena janela pedindo a URL será exibida  (graças ao Zenity) e após confirmar o arquivo será baixado via wget na pasta que você está vendo.

Criando ferramentas mais elaboradas

Eu tenho certeza que se parar por aqui muita gente já vai se dar por satisfeita com o artigo e começar a criar scripts para automatizar algumas tarefas, mas até o momento só mostrei como executar uma dada tarefa na pasta atual. Se quiserem trabalhar com arquivos selecionados, como por exemplo, selecionar uns 10 arquivos quaisquer e a partir de um destes scripts criar um backup deles, ou enviar por FTP, ou converter seus nomes para maiúsculas, minusculas etc seria necessário conhecer as variáveis de ambiente que o Nautilus nos disponibiliza para isso.

Variáveis de sistema para criar programas mais incrementados

São apenas estas 4 variáveis que nós temos disponíveis:

  • NAUTILUS_SCRIPT_SELECTED_FILE_PATHS: caminhos delimitados por fim-de-linha para os arquivos selecionados (apenas para arquivos locais – que não estejam em compartilhamentos SFTP, SMB etc montados pelo sistema vfs do Gnome)
  • NAUTILUS_SCRIPT_SELECTED_URIS: URIs delimitadas por fim-de-linha para os arquivos selecionados
  • NAUTILUS_SCRIPT_CURRENT_URI: URI para a localização atual
  • NAUTILUS_SCRIPT_WINDOW_GEOMETRY: posição e tamanho da janela atual

Pra não me altongar mais do que espero nós só usaremos a primeira variável nos exemplos adiante. Isto é suficiente para a maioria das nossas necessidades. Se quiser mais detalhes sobre as demais variáveis faça uma breve consulte a ajuda do Nautilus.

Exemplo3: Convertendo nomes de arquivos para minúsculas

O script a seguir é um pouco mais complexo, já que para suprir a necessidade de trabalhar com vários arquivos selecionados é necessário fazer um laço de iteração com o comando for, do Bash, que executa a tarefa desejada individualmente em cada arquivo.

#!/bin/bash
OLDIFS=${IFS}
IFS="
"
for arquivo in ${NAUTILUS_SCRIPT_SELECTED_FILE_PATHS}; do
   nomearquivo=$(basename $arquivo)
   novonome=`echo ${nomearquivo} | tr '[A-Z]' '[a-z]'`
   mv ${nomearquivo} ${novonome}
done
IFS=${OLDIFS}

Para quem conhece os segredos do Bash, vai notar que o comando que efetivamente renomeia o arquivo selecionado é o “mv” e para conseguirmos o nome do arquivo em minúsculas sem que o usuário precisasse tocar no teclado foi executada uma “mágica” com o comando “tr” que recebeu devidamente o nome original do arquivo já previamente separado do seu caminho pelo comando “basename”.

Observe ai que basicamente são estas três linhas comentadas acima quem efetivamente renomearão o arquivo. Mas coma estas linhas só permitiriam renomear um único arquivoNós enfiamos tudo dentro de laço “for() {}” para que estes comandos sejam executados uma vez para cada arquivo selecionado (a lista com os arquivos selecionados foi provida pela variável “$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS”.

Salve mais este arquivo em sua pasta de scripts e divirta-se!

Exemplo 4: Convertendo nomes de arquivos para maiúsculas, substituindo espaços etc

O exemplo 3, dado anteriormente é o esboço de praticamente qualquer script que venhamos a fazer manuseando arquivos previamente selecionados.

Por exemplo para converter os nomes para maiúsculas bastaria substituir a linha 7 que é:

   novonome=`echo ${nomearquivo} | tr '[A-Z]' '[a-z]'`

pela linha:

   novonome=`echo ${nomearquivo} | tr '[a-z]' '[A-Z]'`

Veja que apenas a sintaxe do comando “tr” foi modificada. Seguindo a mesma linha de raciocício, se quisesse substituir os espaços no nome de arquivos por um caracter como “_” por exemplo substituiria esta linha por:

   novonome=`echo ${nomearquivo} | tr ' ' '_'`

Eu poderia usar o Zenity, como feito no exemplo 2 para solicitar o caracter a ser usado, no lugar do espaço. Ficaria algo assim:

   caracter=$(zenity --entry --text "Informe o caracter" --text-entry="_")
   novonome=`echo ${nomearquivo} | tr ' ' ${caracter}`

Dica: Desta forma, para cada arquivo selecionado será perguntado o caracter a ser usado, ou seja, se você selecionou 1000 arquivos MP3 que terão o caracter substituído, você terá que responder 1000 vezes a pergunta. Uma sugestão para que isto não aconteça é colocar linha que chama o comando Zenity fora do laço “for” (na linha anterior).

Aproveite os exemplos e use a sua imaginação em seu favor :^)

Exemplo 5: Calculando o hash MD5 de um arquivo

Para finalizar o artigo, mas não esgotando o assunto, o exemplo a seguir calcula o hash MD5 dos arquivos selecionados e se você quiser cria um arquivo com esta informação para posterior verificação.

#!/bin/bash
OLDIFS=${IFS}
IFS="
"
for arquivo in ${NAUTILUS_SCRIPT_SELECTED_FILE_PATHS}; do
    nomearquivo=$(basename $arquivo)
    CHAVE=$(md5sum $arquivo)
    SAIDA="A chave de validação MD5 é:\n $CHAVE \n\nDeseja salvar em um arquivo para posterior conferência?"
    zenity --question --text "$SAIDA" && echo "$CHAVE" >> "$nomearquivo".md5sum
done
IFS=${OLDIFS}

Observe que este script exibe o hash calculado (Deus abençoe os autores do Zenity) e usando esta mesma ferramenta ele questiona se desejamos salvar este hash em um arquivo. Caso a resposta seja positiva um arquivo com o mesmo nome do arquivo verificado será criado, mas com a extensão “.md5sum”, e cujo conteúdo é o hash daquele documento.

Fica como exercício permitir ao usuário criar um único arquivo com o hash de todos os aquivos selecionados, OK!?

O que pode dar errado

Um aviso importante a ser dado também é que o WordPress, o CMS que uso para manter este blog costuma substituir alguns caracteres como o > por > o caracter & por & e ainda as aspas tradicionais de programação por aspas tipográficas que são mais bonitas, mas causam erro na hora de executar os scripts. Dado o aviso, não esqueça de verificar estes itens antes de perguntar porque não funcionou se você simplesmente copiou e colou exatamente o que estava escrito aqui.

Encerrando

Como disse, isso não esgota o assunto. Se observar a base de todos os scripts ela é a mesma o que torna fácil criar uma nova automação apenas mudando o “miolo” do laço for.

Caso lembre de algo mais eu aviso. No mais, tão logo seja possível eu disponibilizo um “pacotão” contendo todos os script prontos para download/instalação. Por fim, não deixe de consultar as referências que cito abaixo. Cada site possui pelo menos um script bacana para seu uso, ou links para eles, vale a pena conferir.

Referências

Comunidade Ubuntu Linux Brasil. Nautilus Scripts. http://planeta-ulb.net/wiki/index.php/Categoria:Nautilus_Script

Hamacker. Integrando o nautilus a scripts. http://hamacker.wordpress.com/2008/06/02/integrando-o-nautilus-a-scripts/

Cláudio Novais. Como instalar scripts do nautilus. http://ubuntued.info/2008/01/como-instalar-scripts-do-nautilus.html

Lincoln Lordello. Nautilus Scripts. http://www.vivaolinux.com.br/artigo/Nautilus-Scripts/

Mundo Geek. My Nautilus scripts. http://mundogeek.net/nautilus-scripts/

Ubuntu-BR. Nautilus – Gerenciador de arquivos. http://wiki.ubuntu-br.org/Nautilus

G-Script. Nautilus File Manager Scripts. http://g-scripts.sourceforge.net/

Projeto Gnome. Scripts do Nautilus. http://library.gnome.org/users/user-guide/stable/gosnautilus-444.html.pt_BR

Google. Procura por Nautilus script na Internet. http://www.google.com.br/search?q=script+nautilus

7 comentários em “Estendendo o poder de trabalho do Nautilus”

  1. Pingback: Welington via Rec6
  2. Caro sr. Braga,
    Estou iniciando no Ubuntu e tenho 1 dificuldade com o Nautilus:
    No explorer do windows, qdo quero alterar o nome de um arquivo, posiciono nele, dou 1 clique, espero e dou o segundo clique. A caixa do nome do arquivo abre e eu posso alterar o nome dele.
    Como faço isso no nautilus? Não é pratico ir na caixa propriedades e mudar o nome por lá.
    Imagine a seguinte situação: Baixo o arq. de filme AVI e seu respectivo SRT. tenho que mudar o nome de um para equivaler ao nome do outro, senão o reprodutor de vídeos não consegue ler as legendas….
    Agradeço, de antemão, sua ajuda!

  3. Olá @fernando ,

    Seja bem vindo ao mundo Linux. Uma das diferenças que você terá que se adaptar no novo sistema é esta para renomear arquivos, mas você não precisa exibir as propriedades do arquivo para renomeá-lo, esta é a forma mais trabalhosa de se fazer isto.

    Respondendo a sua pergunta, uma forma prática de renomear o arquivo é clicar no seu ícone e teclar [F2] no teclado. Ao fazer isto você terá uma caixa abaixo (ou ao lado) do seu ícone, onde será possível editar o seu nome exatamente como acontece no outro sistema.

    Na mudança de sistema você terá que se adaptar a algumas diferenças existentes entre os dois mundos, este processo algumas vezes pode parecer difícil mas não é não.

    Depois de vários anos lecionando Windows hoje em dia eu só uso Linux integralmente e quando preciso usar o Windows vejo o quanto ele é difícil e horroroso de ser usado.

    Felicidades e sucesso com o novo sistema.

  4. Welington,
    Dica excelente! Estava a procura desta funcionalidade! Não gosto de tarefas repetitivas e busco sempre automatizá-las através de scripts e macros.
    Obrigado!
    Beto

Deixe um comentário para fernando Cancelar resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.