Linux Colorize Find?

6

É possível "colorir" a saída do find?

Eu tenho um achado que procura / home em todos os meus servidores, e exec 'rm' certos arquivos. Como estes estão misturados com meus outros resultados de busca, entre outras coisas, eu gostaria de colorizá-los.

Isso é possível?

    
por JPerkSter 14.09.2010 / 00:11

7 respostas

5

Com o GNU find, você pode usar -printf em vez de -print para personalizar a maneira como um nome de arquivo é impresso. (Você também pode fazê-lo com a pesquisa padrão, mas de forma arredondada por -exec sh -c 'echo ...' {} .) Por exemplo, o comando a seguir imprime arquivos executáveis em verde e outros arquivos regulares na cor padrão:

find . -type f \( -perm +100 -printf '3[32m%p3[0m\n' -or -print \)
    
por 14.09.2010 / 00:36
6

O que eu costumo fazer para destacar o texto da linha de comando de rolagem é usar essa função bash + perl:

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

como tal:

command | highlight "desired text"

    
por 14.09.2010 / 00:21
2

Isso é semelhante à resposta @jrods, mas isso não requer Perl. Isso funciona com o GNU grep instalado em Darwin, Linux & FreeBSD.

Você pode usar grep com cores e canalizar seu comando pelo grep:

export GREP_OPTIONS="--color=auto"

Em seguida, para destacar o texto, basta fazer algo assim:

find / -name "perl" |grep "your_string_here"
    
por 14.09.2010 / 02:30
2
find ... | grep -E --color 'words of interest|more good stuff|$'

O cifrão faz com que ele corresponda ao final de cada linha, mas não tem nada a destacar, de modo que produza até mesmo linhas sem correspondências, enquanto destaca outras coisas que você listou.

    
por 14.09.2010 / 02:30
1

Eu tenho um que eu uso, por exemplo, para trabalhar como substituto (com alias) de ls -d */ .*/ , que pula os diretórios . e .. :

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

Desta forma, eu não só destaquei, mas o mesmo destaque do sistema que normalmente se aplica.

    
por 24.10.2011 / 18:40
0

Estou usando a seguinte função (definida em ~ /. {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}";
}
    
por 11.10.2010 / 16:56
0

Se as cores no grep estiverem ativas ou automáticas, você pode simplesmente fazer um pipe grep curto com a opção extended-regexp e o cifrão (para exibir todas as linhas).

grep -E 'word|$'

Por exemplo, canalizado com uma pesquisa de localização:

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

que irá destacar todas as ocorrências de "readme" e ainda exibir toda a saída do find.

Sidenote: Se o grep tiver cores desativadas, você pode adicionar a opção --color a ele ( grep -E --color ... ), como sugere Dennis Williamson, ou configurá-lo para a sessão ( export GREP_OPTIONS="--color=auto" ) .

    
por 09.09.2014 / 10:09