linux – 在不降低命令功能的情况下传递命令别名/功能的最佳方法
发布时间:2020-12-14 01:23:09 所属栏目:Linux 来源:网络整理
导读:我有一个函数ll,目前扩展到这个: function ll () { ls -lh --color "$@" | grep "^d"; ls -lh --color "$@" | grep "^-" | grep -v "~"; ls -lh --color "$@" | grep "^l"} 这样做是将列出的文件夹排序为首先显示目录,然后是文件,然后是链接.但是,我发现这
我有一个函数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的完整功能不会丢失? 请注意我目前在我的系统(ls版本5.97)上有bash版本3.2.25(1) – release,所以–show-directories-first-flag不可用. 编辑: 这是我最终使用的功能,我稍微修改了它,以便ll可以在没有任何args的情况下工作: 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 } 解决方法
从@chepner的回答扩展:
而不是使用grep多次运行ls我认为它可以在单个命令中与awk,sort,cut组合并获得相同的输出(目录首先是文件,然后是链接): function ll () { for d in "$@"; 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 } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |