如何从通过 awk 管道传输的 ls 命令中删除目录权限?

如何从通过 awk 管道传输的 ls 命令中删除目录权限?

在我的 ZSH 自定义配置中,我有这个功能:

cll() { ls -AlhG "$@" | 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}'; }

它输出:

➜  test cll
total 32
644 -rw-r--r--    1 work  admin     0B Oct  7 18:55 .hidden
644 -rw-r--r--    1 work  admin   480B Aug 22  2016 gulpfile.js
644 -rw-r--r--    1 work  admin   149B Jan  7  2017 index.php
755 drwxr-xr-x  247 work  admin   8.2K Aug 22  2016 node_modules
644 -rw-r--r--    1 work  admin   1.0K Aug 22  2016 test.less
644 -rw-r--r--    1 work  admin   664B Aug 22  2016 test.min.css
755 -rwxr-xr-x    1 work  admin     0B Oct  7 18:54 try

它还支持颜色,所以我的可执行文件等有漂亮的颜色:)

我想-rw-r--r--从中删除权限细分列(例如:)。所以我希望它看起来像这样:

644    1 work  admin     0B Oct  7 18:55 .hidden
644    1 work  admin   480B Aug 22  2016 gulpfile.js
644    1 work  admin   149B Jan  7  2017 index.php
755  247 work  admin   8.2K Aug 22  2016 node_modules
644    1 work  admin   1.0K Aug 22  2016 test.less
644    1 work  admin   664B Aug 22  2016 test.min.css
755    1 work  admin     0B Oct  7 18:54 try

我曾试图扰乱它,但我所做的一切,都破坏了它。我愿意采用完全不同的方法(不是通过管道awk)。


最终解决方案:

感谢@Skaperen 引起cut我的注意。我对这个函数进行了双重管道传输,效果非常好!这是现在的输出:

➜  test cll
total
 644  work  admin     0B Oct  7 18:55 .hidden
 644  work  admin   480B Aug 22  2016 gulpfile.js
 644  work  admin   149B Jan  7  2017 index.php
 755  work  admin   8.2K Aug 22  2016 node_modules
 644  work  admin   1.0K Aug 22  2016 test.less
 644  work  admin   664B Aug 22  2016 test.min.css
 755  work  admin     0B Oct  7 18:54 try

这是我的功能aliases.zsh(自定义配置):

cll() { ls -AlhG "$@" | 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}' | cut -c 1-5,21-; }

唯一可以使其完美的是,如果我可以添加自定义列来解析它是否是“目录”,“文件”,“符号链接”等。

答案1

通过命令管道它cut -c 1-3,14-。如果需要调整,请调整数字。做man cut更多细节。

相关内容