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