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

Copyright © 2005-2017 LinuxTotal.com.mx
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 González D.  

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-2017 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 O 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


LinuxTotal en:

Si encuentras útil la información que proveé LinuxTotal, considera realizar un donativo que estimule a seguir proporcionando contenido de calidad y utilidad. Gracias.

Más artículos de LinuxTotal

Sistemas basados en GNU/Linux (Al igual que sus parientes basados en Unix como BSD o los de Macinstosh) conservan la tradición de....


yum es un paquete administrador de software(software package manager). Es una muy útil herramienta para instalar, actualizar y re....


vi es el venerable y confiable editor de texto que encontrarás en TODAS las distintas versiones, distribucciones, sabores de Linu....


La demanda civil entablada por la empresa SCO contra la gigante IBM causó revuelo entre la comunidad Linux y Open Source cuando e....


Sistemas Linux con gran cantidad de usuarios, como servidores de correo, servidores samba, etc., tarde o temprano tienen el proble....


Ya son varios los lectores que me preguntan que CMS (content management system) utilizo para este sitio. Ejemplos de CMS son mambo....


El siguiente es un script muy básico de iptables que puedes usar para proteger un solo equipo conectado a Internet a través de u....


Hay ocasiones que cuando busco un archivo dentro del listado de un directorio con varios archivos, usando ls, deseo ver solamente ....


La siguiente combinación de comandos te permite extraer los 10 comandos más usados directamente del historial (comando history) ....


Entre los administradores de sistemas Linux es común el término 'one liners', algo asi como 'los de una línea', y se refiere a ....



Copyright © LinuxTotal.com.mx 2006-2017
info@linuxtotal.com.mx · linuxtotal.com.mx@gmail.com