Ajustar LS_COLORS para sufixos de diretório?

5

Estou muito bem personalizando a maioria das configurações em LS_COLORS . Não preciso de ajuda para personalizar as cores para diferentes sufixos de arquivo. O que eu gostaria de fazer é configurar cores especiais para determinados diretórios , com base em seu sufixo.

(Por exemplo, eu gostaria que dir1/ fosse exibido na cor do diretório padrão, mas dir2.special-suffix/ para exibir em uma cor diferente, que defini para diretórios com nomes que terminam em .special-suffix .)

Eu tentei fazer isso usando o método padrão *.«suffix» (como usado com arquivos), mas sem sorte. Todos os diretórios são exibidos na cor especificada para di e ignoram as regras *.«suffix» subseqüentes.

Isso é possível?

    
por Zearin 04.08.2014 / 18:07

1 resposta

5
Provavelmente não, embora isso possa ter surpreendido os desenvolvedores também. Aqui está um comentário de uma ls.c do GNU:

#   /* Extensions only apply to regular files, apparently. */

Aqui está um link ao máximo ls .c fonte em que você vai encontrar o mesmo, embora não seja tão bonito de ler, talvez.

Vale a pena notar que você pode obter alguma alternância em cores para os diretórios com base em seus modos e / ou dependendo do estado do link. Claro, essas coisas equivaleriam a mudar o conteúdo do relatório para o repórter, mas eu não sou filósofo; então aqui está uma maneira que você pode:

mkdir t_not_other_writable
mkdir x_not_other_writable
chmod o+t t_not_other_writable 
LS_COLORS='lc=:rc=:rs=:di=FG=BLD;CLR=BLUE :st=FG=REV;CLR=BLUE :' \
    /usr/bin/ls --color=always -nFl

OUTPUT

drwxr-xr-x 1 1000 1000 0 Aug  7 14:37 FG=BLD;CLR=BLUE x_not_other_writable/
drwxr-xr-t 1 1000 1000 0 Aug  7 14:36 FG=REV;CLR=BLUE t_not_other_writable/

E só para ter certeza de que tal coisa não era uma ideia ridiculamente perigosa, verifiquei com o Google o que a parte pegajosa faz:

A Sticky bit is a permission bit that is set on a file or a directory that lets only the owner of the file/directory or the root user to delete or rename the file. No other user is given privileges to delete the file created by some other user.

Então, se estamos falando de seus diretórios que não são coisas que você pretende permitir que outros excluam, provavelmente não há nenhum dano.

P.S. Se você está curioso sobre o que está acontecendo com a definição $LS_COLORS , eu o cobri muito bem (espero) aqui . Eu também colei alguns comentários adicionais da fonte abaixo, os quais eu espero que você encontre bem alinhados com a saída que o dircolors -p fornecerá a você (para os que se incomoda também definir, isto é) :

#   /* lc: Left of color sequence */
#   /* rc: Right of color sequence */
#   /* ec: End color (replaces lc+no+rc) */
#   /* rs: Reset to ordinary colors */
#   /* no: Normal */
#   /* fi: File: default */
#   /* di: Directory: bright blue */
#   /* ln: Symlink: bright cyan */
#   /* pi: Pipe: yellow/brown */
#   /* so: Socket: bright magenta */
#   /* bd: Block device: bright yellow */
#   /* cd: Char device: bright yellow */
#   /* mi: Missing file: undefined */
#   /* or: Orphaned symlink: undefined */
#   /* ex: Executable: bright green */
#   /* do: Door: bright magenta */
#   /* su: setuid: white on red */
#   /* sg: setgid: black on yellow */
#   /* st: sticky: black on blue */
#   /* ow: other-writable: blue on green */
#   /* tw: ow w/ sticky: black on green */
#   /* ca: black on red */
#   /* mh: disabled by default */
#   /* cl: clear to end of line */
    
por 04.08.2014 / 20:26