Archive for julho \20\UTC 2011

Apagar diretórios vazios no Linux

20/07/2011

O comando que permite pesquisar uma árvore de diretórios, apagando os que estiverem vazios é:

 find . -type d -depth -empty -print -exec rmdir {} \; 

Descobri esse comando outro dia quando precisei apagar vários diretórios vazios que estavam no meio de outros com conteúdo. A minha primeira ação foi utilizar o Nautilus (navegador de arquivos do Gnome), contudo depois de algum tempo perdido na tarefa “braçal” e monótona de verificar se um diretório estava vazio para então removê-lo, resolvi usar os neurônios para encontrar uma solução mais eficiente. Parti para “força” por trás das interfaces gráficas, fui ao Shell.

Inicialmente, pensei logo em escrever um script, mas mudei de idéia rapidamente, pois isso demandaria tempo e um certo trabalho. Eu queria uma solução mais rápida e que evitasse a fadiga ;-). Portanto, fui “fuçar” o sistema em busca de algum comando ou script que resolvesse o meu problema.

Utilizei o comando apropos para verificar quais comandos eram relacionados a diretórios:

apropos directories 

A saída do comando foi essa:

cleanlinks (1)       - remove dangling symbolic links and empty directories
cp (1)               - copy files and directories
fdupes (1)           - finds duplicate files in a given set of directories
mkdir (1)            - make directories
rm (1)               - remove files or directories
rmdir (1)            - remove empty directories

Comecei as minhas tentativas pelo rmdir.  Li em sua página de manual que ele apagava diretórios vazios.  Era exatamente isso que eu queria. Utilizei o comando:

 rmdir */

Ele apagou somente os diretórios que estavam sem conteúdo. Mas aqueles que tinham subdiretórios vazios, ficaram. Na prática eles eram apenas uma cadeia de diretórios contendo outros diretórios sem qualquer arquivo.

Pensei que teria mesmo de desenvolver um script, quando resolvi testar o comando cleanlinks. Na sua página de manual é informado que ele remove  links simbólicos pendentes e diretórios vazios.

cleanlinks

Fiquei surpreso com a objetividade do comando, pois ele não tem opções e nem pergunta nada. Apenas sai varrendo todos os diretórios abaixo do atual e apaga os que estiverem vazios.

Bateu a curiosidade. Como é que ele faz isso? Será que é um script ou um binário?

Uma das partes boas do Software Livre é que podemos ver os códigos fontes dos programas. Resolvi tentar ver como esse comando funcionava internamente. Para isso, precisava saber onde ele ficava armazenado, portanto usei o whereis:

whereis cleanlinks  cleanlinks: /usr/bin/cleanlinks /usr/share/man/man1/cleanlinks.1.gz

Descobri que o programa era um script. Para ver o seu código fonte bastou digitar:

vi /usr/bin/cleanlinks

Cujo resultado foi:

#!/bin/sh
#
# Copyright © 2000, 2003 by The XFree86 Project, Inc
#
# Remove dangling symlinks and empty directories from a shadow link tree
# (created with lndir).
#
# Author: David Dawes <dawes@xfree86.org>
#
# $XFree86: xc/config/util/cleanlinks.sh,v 1.2 2003/04/15 03:05:16 dawes Exp $
find . -type l -print |
(
   read i
   while [ X"$i" != X ]; do
      if [ ! -f "$i" ]; then
         echo $i is a dangling symlink, removing
         rm -f "$i"
      fi
      read i
   done
)

echo Removing empty directories ...
#find . -type d -depth -print | xargs rmdir > /dev/null 2>&1
find . -type d -depth -empty -print -exec rmdir {} \;
exit 0

Vi que a linha de comando responsável por apagar os diretórios vazios recursivamente era:

find . -type d -depth -empty -print -exec rmdir {} \;

Basicamente o funcionamento dessa linha é:

  1. . (ponto) indica que o find deve iniciar a busca a partir do diretório atual;
  2. -type d deve procurar somente por diretórios;
  3. -depth processar cada conteúdo do diretório antes do diretório em si;
  4. -empty selecionar somente os diretórios vazios;
  5. -print -exec rmdir {} \; apaga cada diretório encontrado que atenda as condições anteriores.

Uma última informação: o cleanlinks faz parte do pacote xutils-dev que não vem por padrão no Ubuntu.  Se quiser usar o primeiro é necessário instalar  o segundo.

Até a próxima!

Anúncios

Discurso de Steve Jobs na formatura de Stanford em 2005

18/07/2011

Até o dia 15 de julho de 2011, eu ainda não tinha visto o vídeo abaixo, onde o Steve Jobs, um dos fundadores da Apple e do Estúdio Pixar, fez um belíssimo discurso na formatura dos alunos de Starford. Achei esse vídeo tão inspirador que resolvi publicá-lo na Maloca.

O som está em inglês. Mas é possível ver legendas em português fazendo os seguintes passos:

  1. Clique na seta em branco que aparece por cima do vídeo, espere ele iniciar;
  2. Mova o mouse para cima (eu falei mover, não é para clicar) das letras CC que ficam ao lado do “240p” na parte de baixo do vídeo;
  3. Será aberto um pequeno menu, clique em “Translate Captions BETA“,
  4. Escolha “Portuguese — Português“, clique em OK.

Aprecie sem moderação 😉

Hoje é domingo

17/07/2011

Hoje é domingo do pé do cachimbo;

Cachimbo de ouro que bateu no besouro;

Besouro de prata que bateu na barata;

Barata de linha que bateu na galinha;

Galinha valente que bateu no tenente;

Tenente que dormiu e acordou doente com dor no dente.

Alguém lembra do texto acima? Ele fez parte da minha infância, lá em Santarém. Talvez tenha feito parte da sua também. Eu o aprendi através da tradição oral com os meus pais. Não, acho que foram com os meus tios! Ou teria sido com meus avós? Não importa. O importante é que esse conhecimento além de me divertir, pois gostava das rimas; também instigava a minha curiosidade, pois eu me perguntava quem tinha inventado aqueles versos? Nunca fiquei sabendo a origem deles. Mais tarde aprendi que esse tipo de conhecimento faz parte do nosso Folclore e vai sendo modificado conforme vai passando de geração para geração.

Era outro tempo, sem Internet, sem celulares, com pouquíssimos vídeo-games, e poucos desenhos animados. Eu gostava muito quando os adultos recitavam esses tipos de versos e tentava decorá-los. Quem conseguia tal façanha, era tido como muito inteligente pelos “mais velhos”. Isso de certa forma ajudava no desenvolvimento de habiliades como memória e concentração das crianças daquela época, pois nós tínhamos que nos concentrar, prestar o máximo de atenção. A criançada se concentrava tanto que chegávamos a “ouvir” com os olhos e “ver” com os ouvidos, enquanto nossa imaginação montava as imagens dos versos. Hoje tudo é muito rápido, colorido e cheio de sons. As crianças mal conseguem se concentrar em uma única atividade, mal começam um jogo, já mudam para outro porque enjoaram do anterior. As crianças acabam não absorvendo a cultura de seus antepassados, mas sabem qual é a última moda da TV ou da Internet.

Na correria do dia-a-dia, eu já esqueci muita coisa que me ensinaram quando eu era criança. A partir de agora sempre que lembrar de alguma coisa desse conhecimento que passa de pai para filho, vou registrá-lo aqui na  Maloca.

Quando lembrei desses versos no trabalho, os meus colegas conheciam uma outra versão que eu não conhecia. Imagino que cada região do país deve ter uma ou várias versões deles, por isso convido a todos a colocarem nos comentários a versão que conhece. Não esqueçam de mencionar a sua cidade e o Estado.

Tenham um excelente domingo. (Do pé do cachimbo é claro! 😉 )


%d blogueiros gostam disto: