Text-Processing
如何從通過 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-; }
唯一能讓這個完美的事情是,如果我可以添加一個自定義列來解析它是否是“目錄”、“文件”、“符號連結”等。
通過命令管道它
cut -c 1-3,14-
。如果需要調整數字,請調整它。man cut
了解更多詳情。