Agregar color al alias de ls personalizado

Creé un alias para mostrar los permisos en formato de octeto:

alias lso="ls -l | awk '
{
  k=0;
  for (i=0;i<=8;i++)
    k+=((substr($1,i+2,1)~/[rwx]/)*2^(8-i));
  if (k)
    printf("%0o ",k);
  print
}'

También agregué este código para mostrar ls en un formato de color:

export CLICOLOR=1
export LSCOLORS=GxFxCxDxBxegedabagaced

Lo que me pregunto es cómo hacer que mi alias se muestre también en un formato de color. Además, si alguien pudiera explicar la sintaxis del alias (después de la tubería)? Copié el texto y estoy tratando de aprender a poder sintetizar comandos como este.

Respuestas (1)

El valor predeterminado lsprovisto con OSX proviene de BSD y no le permitirá hacer lo que quiera.

Usando CoreUtils ls (instalado con macport, está disponible con el glscomando)

Obtendrás tus colores usando --color=always:

ls -l --color=always | awk '
{
  k=0;
  for (i=0;i<=8;i++)
    k+=((substr($1,i+2,1)~/[rwx]/)*2^(8-i));
  if (k)
    printf("%0o ",k);
  print
}'

Sobre la parte awk:

  • lsemite permisos de archivo como 9 caracteres. Por eso hay un bucle.
  • los substrretornos en cada paso uno de los caracteres (índice incrementado, 1 subcadena de longitud de caracteres)
  • ~/[rwx]convierte el carácter a 1 si es a ro a wo ax
  • la operación detrás solo hace la operación para obtener el resultado decimal
  • print("%0o ", k)simplemente imprime el resultado octal del valor decimal calculado antes