logotux

Información y servicios en Linux y Open Source

Inicio :: Información ::
Google
linuxtotal rss feed RSS Añadir a Google Añadir a My Yahoo! Añadir a mymsn Añadir LinuxTotal a favoritos


Listado de directorios con búsqueda de patrones (l.sh)

Copyright 2005-2010 Sergio González Durán
Se concede permiso para copiar, distribuir y/o modificar este documento siempre y cuando se cite al autor y la fuente de linuxtotal.com.mx y según los términos de la GNU Free Documentation License, Versión 1.2 o cualquiera posterior publicada por la Free Software Foundation.

autor: sergio.gonzalez.duran@gmail.com


Hay ocasiones que cuando busco un archivo dentro del listado de un directorio con varios archivos, usando ls, deseo ver solamente el nombre del archivo(s) o parte del nombre del archivo(s), pero sin perder el contexto del resto de los archivos. Ejemplo, dentro de /proc/sys/net/ipv4 quiero ver los archivos que contengan 'max' como parte de su nombre, lo siguiente lo logra:

$> ls /proc/sys/net/ipv4 | grep max
igmp_max_memberships
igmp_max_msf
inet_peer_gc_maxtime
inet_peer_maxttl
ipfrag_max_dist
tcp_max_orphans
tcp_max_ssthresh
tcp_max_syn_backlog
tcp_max_tw_buckets

Esta bien pero lo que yo deseo es mostrar lo anterior, junto con los demás archivos del directorio, entonces, el listado debe darme el directorio y con los archivos que deseo con la búsqueda resaltada en rojo o en otro color.

No encuentro ningún comando que lo haga (si sabes de uno dímelo), asi que pues me inventé mi propio comando o script que realize lo anterior, y se logra con unas cuantas líneas, este es el script:

#!/bin/bash
################################################################################################################
# Copyright 2005-2010 Sergio González Durán (sergio.gonzalez.duran@gmail.com)
# Se concede permiso para copiar, distribuir y/o modificar este programa siempre y cuando se cite al autor y la
# fuente de linuxtotal.com.mx y según los términos de la GNU General Public License, Versión 3 o cualquiera
# posterior publicada por la Free Software Foundation.
################################################################################################################
# un poco de ayuda, deben existir dos argumentos, si no manda ayuda if [ $# -lt 2 ] then echo "uso: ./l /directorio patron" echo "ejemplo: ./l /etc samba" exit fi # variable $DIR es el primer argumento del script, la ruta del directorio DIR=$1 # variable $BUS es el segundo argumento lo que se quiere buscar dentro de los nombres de archivo del directorio BUS=$2 # variable $ROJO cambia el texto a rojo (setaf 1) e invierte (smso) ROJO=`tput setaf 1; tput smso` # variable $NORMAL regresa el texto a normal, sin atributos NORMAL=`tput sgr0` # se ejecuta el listado y se sustituye lo buscado por lo mismo pero en rojo con sed ls -C $DIR | sed s/"$BUS"/"$ROJO$BUS$NORMAL"/

ls -C despliega el listado en columnas, de hecho es el comportamiento por defecto con ls solo que si lo dejara sin argumentos al encauzarse a sed quedaría como una sola lista larga de archivos, asi que nos aseguramos que el resultado sea en varias columnas, después sed sustituye 's' el patrón a buscar por el mismo patrón pero le añade el color invertido rojo y después vuelve al texto normal.

Veamos como se ve el resultado del script, buscando 'max' dentro de los archivos de /proc/sys/net/ipv4:

Lo anterior es lo que buscaba, una modificación a ls que me resalté una búsqueda dentro del listado del directorio.

Copiamos el script (como usuario root) a /usr/bin, por ejemplo, donde este más disponible al ser una ruta estandar del PATH. Cambiamos permisos para que pueda ser ejecutado por cualquier usuario (chmod 4755 /usr/bin/l) y creamos un alias al script ejecutable en /usr/bin, (alias l='/usr/bin/l'), de esta manera no lo tendrás que ejecutar solamente desde se encuentre el script shell original con ./l /etc samba, sino como se aprecia en el ejemplo como: l /etc samba, y desde cualquier directorio en el que te encuentres.

Espero te pueda ser útil este pequeño shell script.


Artículos relacionados



AÑADIR ESTE ARTÍCULO A MIS FAVORITOS


Más artículos sobre Linux y Open Source


LinuxTotal.com.mx · Información y servicios en Linux y Open Source · info@linuxtotal.com.mx · sergio.gonzalez.duran@gmail.com