¿Requieres de una instalación o configuración de Linux o sus servicios?
¿Un desarrollo WEB empresarial a la medida?
¿Un curso o capacitación a la medida?
Revisa el sitio de SERVICIOS de LinuxTotal


Listado de directorios con bsqueda de patrones (l.sh) 

Copyright © 2005-2025 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:  

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-2025 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



¿Requieres de una instalación o configuración de Linux o sus servicios?
¿Un desarrollo WEB empresarial a la medida?
¿Un curso o capacitación a la medida?
Revisa el sitio de SERVICIOS de LinuxTotal

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.


Dona a través de paypal::


O a través de bitcoins:


14TNQv5wM3xkSv65gHGQ6s6f8yTZuFTohE
Más artículos de LinuxTotal

Aqui, traté de enviar un archivo ejecutable (notepad.exe) a través de gmail, y sus mecanismos de seguridad me lo impidieron. Gma....


Linux es un sistema multiusuario, por lo tanto, la tarea de añadir, modificar, eliminar y en general administrar usuarios se conv....


EL espacio disponible en disco se determina con este comando built-in del sistema operativo Linux, df.....


....


Cron es el nombre del programa que permite a usuarios Linux/Unix ejecutar automáticamente comandos o scripts (grupos de comandos)....


En Linux existen tres formas de controlar y mostrar la marca del tiempo en archvios y directorios. Asi es, cuando creas o editas u....


En Linux hay diversas herramientas para empaquetar y comprimir archivos, tomando en cuenta que empaquetar es juntar dos o más arc....


De acuerdo a la definición en wikipedia un rootkit es una herramienta, o un grupo de ellas que tiene como finalidad esconderse a ....


La más simple definición de un proceso podría ser que es una instancia de un programa en ejecución (corriendo). A los procesos....


Hoy en día los usuarios de Windows y Linux tenemos múltiples formas de combinarlos en el mismo equipo. Ya sea que uses el tradic....



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