Text-Processing

如何從通過 awk 管道傳輸的 ls 命令中刪除目錄權限?

  • October 8, 2017

在我的 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-; }

唯一能讓這個完美的事情是,如果我可以添加一個自定義列來解析它是否是“目錄”、“文件”、“符號連結”等。

通過命令管道它cut -c 1-3,14-。如果需要調整數字,請調整它。man cut了解更多詳情。

引用自:https://unix.stackexchange.com/questions/396748