Como colorir arquivos ocultos nas listagens de arquivos `ls`?

10

LS_COLORSA variável ambiental permite que você decida as cores dos diferentes tipos de arquivo para o lscomando do GNU coreutil , como diretórios, arquivos regulares, links etc. nenhuma opção para especificar uma cor de exibição para eles.

Existe alguma outra maneira de fazer com que as lslistagens mostrem arquivos ocultos em uma cor diferente?

Johnny Baloney
fonte
Esta resposta tem mais do que você sempre quis saber LS_COLORS. Eu não conseguia descobrir como fazê-lo funcionar em arquivos dot, mas você pode querer dar uma olhada.
terdon
1
@terdon - não funciona para arquivos dot. Pode ser para alguns, mas muito poucos. Há um limite para o comprimento de uma extensão e a maioria dos nomes de arquivos inteiros o excederá. Ele funcionará para arquivos nomeados *.hidepor exemplo. Esta resposta soluciona um problema semelhante para diretórios, embora as respostas para isso e o problema de diretório provavelmente não sejam as mesmas.
precisa saber é o seguinte

Respostas:

1

Se você estiver classificando apenas por nome, isso pode ajudar:

alias ll='LS_COLORS=$LS_COLORS:"di=0;34:" ; S_COLORS=$LS_COLORS:"fi=0;37:" ; export LS_COLORS; ls -dHhl --color=auto .*; LS_COLORS=$LS_COLORS:"di=1;94:" ; LS_COLORS=$LS_COLORS:"fi=1;37:" ; export LS_COLORS$

No entanto, ele divide o comando ls em duas partes, uma para arquivos e pastas ocultas e outra para o restante.

pateta
fonte
0

Sim, use cf. Acabei de lançar uma versão bem documentada, especificamente cores ls outputs por extensão de arquivo e / ou certos atributos especiais (executável, links, ocultos e diretórios). Experimente !!! É difícil deixar de usar isso depois que você se acostuma.

https://github.com/AdamDanischewski/cf

A.Danischewski
fonte
-1

Se você apenas deseja destacar arquivos ocultos (e pastas) e não se importa com a coloração de todos os outros arquivos, a abordagem óbvia é executar ls -la | grep -E "^| \.[^/|'.].*"

Se você deseja manter as outras cores, as coisas começam a ficar complicadas, porque $LS_COLORSnão suporta nativamente a coloração de arquivos ocultos como parece.

Tive a ideia de anexar dinamicamente os arquivos ocultos do diretório atual à $LS_COLORSvariável de ambiente como uma pseudo extensão, depois executar ls -lae depois executar dircolorspara redefinir o esquema de cores original. Obviamente, haverá um conflito se um arquivo oculto tiver o mesmo nome que uma extensão conhecida. Além disso, este método não funciona com pastas ocultas.

Aviso: Esta solução é um hack (não muito exaustivamente testado). Use-o por sua conta e risco.

for h in $(ls -A | grep "^\."); do LS_COLORS="$LS_COLORS*$h=04;05:"; done; ls -la; eval $(dircolors)

Michael Osl
fonte