Pregunta Linux Colorize Find?


¿Es posible "colorear" la salida de encontrar?

Tengo un hallazgo que busca / inicio en todos mis servidores, y ejecuto ciertos archivos. Como estos se mezclan con mis otros resultados de búsqueda, entre otras cosas, me gustaría colorearlos.

es posible?


6
2017-09-13 22:11


origen




Respuestas:


Con GNU find, puedes usar -printf en lugar de -print para personalizar la forma en que se imprime un nombre de archivo. (También puede hacerlo con búsqueda estándar, pero de forma indirecta a través de -exec sh -c 'echo ...' {}.) Por ejemplo, el siguiente comando imprime archivos ejecutables en verde y otros archivos normales en el color predeterminado:

find . -type f \( -perm +100 -printf '\033[32m%p\033[0m\n' -or -print \)

5
2017-09-13 22:36



¿Hay alguna manera de imprimir solo lo que estamos buscando? - JPerkSter
[root @ server / home] # encontrar. (-maxdepth 1 -iname "cpmove- *" -printf '\ 033 [32m% p \ 033 [0m \ n' -o -print) - JPerkSter
Esto es igual a todo, pero solo coloreando archivos 'cpmove' - JPerkSter
@JPerkSter: Esa fue la intención de mi ejemplo. Si no quieres imprimir todo, quita -or -print. - Gilles


Lo que normalmente hago para resaltar el texto de la línea de comando de desplazamiento es usar esta función bash + perl:

highlight() { perl -pe "s/$1/\e[1;31;43m$&\e[0m/g"; }

como tal:

command | highlight "desired text"


6
2017-09-13 22:21



En mis propias cajas pongo esa función en .bashrc, cuando estoy trabajando en las cajas de otras personas, simplemente las pego como una sola línea. - violet
Tu rock jrod ¡¡¡¡Gracias!!!! - JPerkSter
Bonito. Pero, ¿por qué no usar grep --color? :) Está disponible en gnu grep en todas las plataformas durante muchos años. - Not Now
grep también descarta líneas no coincidentes :( La respuesta de Dennis Williamson es aproximadamente equivalente, aunque: D - violet


Esto es similar a la respuesta de @jrods, pero esto no requiere Perl. Esto funciona con GNU grep que se instala en Darwin, Linux y FreeBSD.

Usted podría usar grep con colores, y canaliza tu comando a través de grep:

export GREP_OPTIONS="--color=auto"

Luego, para resaltar el texto, simplemente haga algo como esto:

find / -name "perl" |grep "your_string_here"

2
2017-09-14 00:30





find ... | grep -E --color 'words of interest|more good stuff|$'

El signo de dólar lo hace coincidir con el final de cada línea, pero no tiene nada que resaltar, por lo que produce líneas uniformes sin coincidencias, al tiempo que resalta otras cosas que ha enumerado.


2
2017-09-14 00:30



+1 Me gusta mucho eso! Si el color para grep está activado de forma predeterminada (o configurado en auto) es un canal muy corto para resaltar, que está disponible en casi todas partes: grep -E 'word|$'. Esto debería obtener más atención! - Levit
Incluso con la escritura export GREP_OPTIONS='--color=auto' UNA VEZ (por ejemplo, en los cuadros de otras personas, que no tienen colores grep activados de forma predeterminada) grep -E 'i|$' es todavía más corto que la mayoría de las otras soluciones aquí. - Levit


Tengo uno que uso, por ejemplo, para trabajar como un reemplazo (alias) para ls -d */ .*/ que se salta el . y .. directorios:

encontrar . -mindepth 1 -maxdepth 1 -type d -exec ls --color = auto -d {} \;

De esta manera no solo me queda destacar, sino mismo Sistema de resaltado que normalmente se aplicaría.


1
2017-10-24 16:40





Estoy usando la siguiente función (definida en ~ /. {Ba, z} shrc):

HLCOLOR="\x1b[30;47m"
NOCOLOR="\x1b[0m"

#Usage: find [dir] [mask1] [mask2]...
#where maskN will become <<-iname '*maskN*'>> param for 'find'
#'dir' should be an existing directory. otherwise it will be recognized as mask.
function findm {
        local it cl sp;
        [ -d "$1" ] && cl="'$1'" && shift;
        for it in "$@"; do
                cl="${cl} -iname '*${it}*' -or";
                sp="${sp}${it}\\|";
        done;   
        cl="${cl%-or}";
        sp="s/\\(${sp%\\|}\\)/${HLCOLOR}\\0${NOCOLOR}/ig";
        eval find ${cl} | sed -e "${sp}";
}

0
2017-10-11 14:56





Si los colores en grep están activados o son automáticos, simplemente puede hacer una tubería grep corta con la opción de expresión regular extendida y el signo de dólar (para mostrar todas las líneas).

grep -E 'word|$'

Por ejemplo canalizado con una búsqueda de búsqueda:

find . -type f | grep -E 'readme|$'

que resaltará cada aparición de "readme" y aún mostrará la salida completa de find.

Nota al margen: Si grep tiene colores desactivados, puede agregarle la opción --color (grep -E --color ...) como lo sugiere Dennis Williamson, o programarlo para la sesión (export GREP_OPTIONS="--color=auto").


0
2017-09-09 08:09