¿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-2024 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-2024 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

He actualizado con varios nuevos comandos la popular guía de LinuxTotal.com.mx, asi como he añadido enlaces en los comandos en l....


En ambientes donde varios usuarios usan uno o más sistemas GNU/Linux, es necesario otorgar distintos permisos o privilegios para ....


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


Traducción del capítulo del libro "Stealing the Network: How to Own a Continent." escrito por Fyodor, autor de nmap. Excelente a....


El editor en línea (stream editor) sed es un editor de texto en línea que realiza operaciones de edición sobre datos provenient....


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


Si acostumbras trabajar en la línea de comandos de Linux, muy posiblemente uses el shell bash (Bourne Again Shell, derivado del b....


Una tarea administrativa algo común, es eventualmente tener que añadir un nuevo disco duro (IDE) al o a los que ya se tienen, de....


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


En casi todas las distribuciones de Linux se instala por defecto el excelente programa para manipulación de imágenes ImageMagick....



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