[英]Bash alias for ls that prints multiple columns by “type”
我只是用ls命令列出文件的基本名稱,就像我從這里得到的:
ls --color -1 . | tr '\n' '\0' | xargs -0 -n 1 basename
我想在第一列中列出所有目錄,在下一列中列出所有可執行文件,最后列出所有常規文件(也許還為每個擴展名列出一列)。
因此,第一個(也是主要的)“挑戰”是打印多個不同長度的列。
您對我應該使用什么命令編寫該腳本有什么建議? 我應該切換find
嗎? 還是我應該只用Perl編寫腳本?
我也希望能夠按大小對列進行排序;-)我並不一定要尋找腳本來完成上述任務,但是可能會提供一些有關編寫此類腳本的建議。
#!/bin/bash
width=20
awk -F':' '
/directory/{
d[i++]=$1
next
}
/executable/{
e[j++]=$1
next
}
{
f[k++]=$1
}
END{
a[1]=i;a[2]=j;a[3]=k
asort(a)
printf("%-*.*s | \t%-*.*s | \t%-*.*s\n", w,w,"Directories", w,w,"Executables", w,w,"Files")
print "------------------------------------------------------------------------"
for (i=0;i<a[3];i++)
printf("%-*.*s |\t%-*.*s |\t%-*.*s\n", w,w,d[i], w,w,e[i], w,w,f[i])
}' w=$width < <(find . -exec file {} +)
通過計算每列最長的條目並將其用作寬度,可以進一步改善此效果。 我將其留給讀者練習
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.