我创建了一个别名来以八位字节格式显示权限:

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
}'

我还设置添加了此代码以彩色格式显示 ls:

export CLICOLOR=1
export LSCOLORS=GxFxCxDxBxegedabagaced

我想知道的是,如何使我的别名也以彩色格式显示?另外,是否有人可以解释别名的语法(在管道之后)?我复制了文本并尝试学习如何合成类似的命令。

有帮助吗?

解决方案

默认 ls OSX 提供的版本来自 BSD,并且不允许您做您想做的事情。

使用 核心工具 ls (与 macport 一起安装,可通过 gls 命令)

你会得到你的颜色使用 --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
}'

关于 awk 部分:

  • ls 将文件权限输出为 9 个字符。这就是为什么有一个循环。
  • substr 在每一步返回 char 之一(递增索引,1 个字符长度的子字符串)
  • ~/[rwx] 如果它是 a,则将 char 转换为 1 r 或一个 w 或一个 x
  • 后面的运算只是得到小数结果的运算
  • print("%0o ", k) 只是打印之前计算的十进制值的八进制结果
许可以下: CC-BY-SA归因
不隶属于 apple.stackexchange
scroll top