簡體   English   中英

ls的Bash別名,按“類型”打印多列

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM