加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

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
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读