sábado, 10 de julio de 2010

Barajitas premiadas (#1) - find

Este es el primero de un seriado de artículos que estaré publicando con herramientas que siempre debemos tener a la mano. Esas herramientas que siempre nos pueden salvar la vida, barajitas! (figuras, de esas que se pegan en un álbum). Y como éstas son especialmente útiles, las he bautizado como barajitas premiadas.

La primera barajita, el siempre bien ponderado y siempre entrañable en otros sistemas no *nix, el find.

El comando find, en su forma más básica, permite buscar archivos que cumplan con algún patrón, por ejemplo, para buscar todos los archivos con extensión .php dentro del directorio /var/www (generalmente, DocumentRoot del Apache):


$ find /var/www -name \*.php


Ahora, la utilidad específica que les quiero presentar es la siguiente:


$ find DIRECTORIO_DESEADO -name ALGÚN_PATRÓN -exec COMANDO '{}' ';'


Este comando buscará dentro de un DIRECTORIO_DESEADO todos los archivos que cumplan con ALGÚN_PATRÓN y para cada uno de ellos aplicará el COMANDO deseado. Note que la cadena '{}' será reemplazada por el nombre de cada archivo que cumpla con el patrón y la cadena ';' indica el fin del comando. Veamos un ejemplo concreto y muy, muy útil:


rodolfo@rcampos-laptop:/opt/symfony-1.4.6$ find . -name \*.php -exec grep 'function form_tag(' '{}' ';'
function form_tag($url_for_options = '', $options = array())
rodolfo@rcampos-laptop:/opt/symfony-1.4.6$ find . -name \*.php -exec grep -l 'function form_tag(' '{}' ';'
./lib/helper/UrlHelper.php
rodolfo@rcampos-laptop:/opt/symfony-1.4.6$


El ejemplo de arriba muestra cómo puedo buscar dentro del directorio raíz de Symfony dónde puede estar declarada la función form_tag y luego en la siguiente línea, con la opción -l del comando grep, pido el nombre del archivo donde se haya encontrado la coincidencia. Después de esto, sólo queda abrir el archivo y ver el detalle de la función. No hace falta ni ahondar en lo poderoso y útil que puede ser esto, sobre todo al trabajar con frameworks de código abierto como Symfony. Recuerde que el comando grep busca coincidencias, según un patrón, dentro de un archivo.

Otra súper útil, cuando trabajo con Subversion (SVN) y deseo mover la carpeta de un proyecto sincronizado... Si no quiero que esta carpeta lleve consigo todos los archivos de SVN, debería borrar las carpetas .svn dentro de cada directorio. Además, esto hace que el proyecto pese mucho más de lo que debería. La barajita:


rodolfo@rcampos-laptop:/var/www/myproj$ find . -name .svn -exec rm -rf '{}' ';'

No hay comentarios:

Publicar un comentario