Saída FIND colorida?

11

É possível obter saída colorida a partir do comando find ? Ou seja, no caminho de cada item encontrado, os diretórios são azuis, os scripts executáveis são verdes, etc? Estou usando a versão 4.4.2 do GNU findutils .

Editar - Para esclarecer, cada resultado seria destacado assim:

./path/to/file.sh
  ^    ^  ^
  |    |  L green
   blue

(se, por exemplo, executar find . -type f ).

    
por wes 08.12.2011 / 05:38

4 respostas

9

UPDATE: Eu adicionei um novo (diferente) script ... Ignacio Vazquez-Abrams tinha um ponto: A pergunta realmente pede executable scripts are green, et cetera .. ok ... você vai encontrar tal script (protótipo) no final desta resposta.

Esta primeira seção (original) é sobre grc e grcat .

Isso deve funcionar; grc ... (como enzotib apontou .. O nome do pacote é grc ... O sub-utilitário usado no exemplo, é grcat

generic colouriser for everything

generic colouriser, can be used to colourise logfiles,
output of commands, arbitrary text....
configured via regexp's.

O exemplo a seguir imprime

  • ./ em magenta
  • bin/cpp/ em ciano
  • bigint em negrito branco

Ainda não resolvi totalmente como ele lida com o arquivo de configuração, mas parece que ele fará o que você quiser (uma vez que você o domar). para um arquivo sem subdiretório ea seqüência de cores parece não estar na mesma seqüência das expressões.
Eu suponho que é possível (mas estou um pouco ocupado no momento) ...

echo "# my config file
regexp=(\./)(.*/)([^/]+)
colours=bold white,magenta,cyan
">$HOME/.grc/findhi

find . -maxdepth 3 -name '*' | grcat findhi

Aqui está o novo script Ignacio inspired :)

Isso funciona se você usar um único caminho como o primeiro argumento para find .
Existem UNTESTED questões neste script. É apenas conceito.
Uma questão é: Links Simbólicos ... águas escuras ...
Como está, ele imprime um ERROR quando encontra um tipo desconhecido (por exemplo, um link simbólico) e continua processando depois disso.
Graças a enzotib para os exemplos tput .

dircol=$(tput bold ;tput setaf 4)
coloff=$(tput sgr0)

root="$HOME"       # define path here, not in 'find' arg
root="${root:-.}"  # default to '.'
root="${root%/}/"  # add trailing '/'
#
find "$root" -maxdepth 1 -name '*' -printf "%y %P\n" | 
  while read -r line ;do
    case $line in 
       d   ) printf "%s\n" "$dircol$root$coloff";;  
       d\ *) printf "%s\n" "$dircol$root${line:2}$coloff";;  
       f\ *) l="$root${line:2}"
             d="${l%/*}/"
             f="${l##*/}"
             cd -P "$d" 
             printf "%s" "$dircol$d$coloff"  
             ls --color=always -R1 "$f"
             cd - >/dev/null
             ;; 
          *) printf "ERROR - type not yet catered for\n";;  
    esac
  done 
    
por 08.12.2011 / 10:25
5

Você pode usar -exec para fazer a maior parte disso (minha solução não colore a parte do diretório de maneira diferente). Se você tiver -print em seu comando find , substitua-o por -exec ls --color -d ; Se você estiver usando a impressão implícita, adicione isso. Isso pressupõe que ls suporta a opção --color .

find . -exec ls --color -d {} \;
    
por 08.12.2011 / 05:46
4

Isso faz apenas o realce de duas cores para o caminho e o nome do arquivo, não o tipo por filetype ls :

Configure as cores de grep output no caminho certo para a peça correspondente e sem correspondência, e combine o nome do arquivo:

$ export GREP_COLORS="sl=0;33;49:ms=1;34;49"
$ find /etc/ -type f | head | grep --color=always '^\|[^/]*$'


VocêpodenãoquerersobrescreveravariávelGREP_COLORS,entãodefina-aapenasparagrep:

$find/etc/-typef|head|GREP_COLORS="sl=0;33;49:ms=1;34;49" grep --color=always '^\|[^/]*$'

(Definições da variável obsoleta GREP_COLOR têm menos prioridade do que aquelas em GREP_COLORS )

Para os códigos de cores, consulte colortest-16 do pacote colortest ,
e a seção "Definir representação gráfica" em sequências de comandos do terminal ANSI .

    
por 23.10.2014 / 14:39
-1

Eu gostei da ideia -exec. Eu usei para criar essa função:

function ff {
    find . -name $1 -exec ls -G -d {} \;
}
    
por 09.11.2012 / 04:43