繁体   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