我有一个功能ll
,目前扩展到这个:
function ll ()
{
ls -lh --color "$@" | grep "^d";
ls -lh --color "$@" | grep "^-" | grep -v "~";
ls -lh --color "$@" | grep "^l"
}
这样做是将列出的文件夹排序为首先显示目录,然后是文件,然后是链接。但是,我发现这种方法会降低ls
命令的功能,例如,如果我尝试调用ll /bin /tmp
,我会从两个文件夹中获得混合文件。
是否有一般的经验法则来传递命令别名/函数,从而不会减少这些命令的全部功能?如果没有,我该如何修复我的ll
命令以保留排序,但ls
不会丢失的全部功能?
请注意,我的系统上目前有 bash 版本 3.2.25(1)-release(ls 版本 5.97),因此--show-directories-first
我无法使用标志。
编辑:
这是我最终使用的函数,我稍微修改了一下,这样ll
就可以在没有任何参数的情况下工作:
function ll () {
if [ $# -eq 0 ]; then set -- .; fi
for d; do
ls -lh --color "$d"|awk '$1~/^d/{i=0} $1~/^l/{i=1} $1~/^-/{i=2} NF>2{print i OFS $0}' | sort -n -k1,1 | cut -d ' ' -f2-
done
}