【问题标题】:ls -l with some modificationsls -l 有一些修改
【发布时间】:2011-11-16 20:30:31
【问题描述】:

我想对 ls -l 命令进行一些更改。

首先,我想删除第一个“total X”行,因为我不使用它。

然后,我想在最上面显示目录。 (或者,更准确地说,按类型排序。)

第三,我想在相同类型的情况下按名称排序。

用脚本或函数式语言,甚至用 C 编写这几乎是微不足道的,但我从我读到的一些东西中得到启发,你不应该为所有东西都写新东西,而应该结合你拥有的工具。几个小时后(!!),我想出了这个:

ls -l | tac | head -n -1 | sort -k 1.1,1.2 -k 9

感觉有点傻,好像行得通。但是:

慢一点:

real 0m0.009s
user 0m0.008s
sys 0m0.008s

而不是 ls -l:

real 0m0.003s
user 0m0.004s
sys 0m0.000s

没有颜色! (用ls -l,字典是蓝色的等等)

所以,如果你知道更好的方法,那就开枪吧:)

【问题讨论】:

  • 好的,非常感谢,这似乎符合我的要求,而且比我的解决方案快得多!我不知道 ls 有这么多选择;我的错。 ls -l --group-directories-first --sort=extension --color=always |尾 -n+2
  • 您可以将其标记为已接受,而不是在 cmets 中发布您喜欢的答案。
  • 好的,对你们来说还有一个挑战——如何保留ls -l [folder] 功能,即,您可以键入lsl my_dir(如果lsl 是修改后的ls -l 命令的别名如上)?

标签: bash ls


【解决方案1】:

man ls,我是说真的,试试看。

对于第 2、第 3 和无颜色

$> ls -l --group-directories-first --sort=extension --color=never

如果您需要颜色,您应该使用--color=auto--color=always

例如,第一个问题是duplicate

其实你可以用awk去掉第一行:

awk '{ if ( NR > 1 ) print }'

所以结果命令看起来像

$> ls -l --group-directories-first --sort=extension --color=always | awk '{ if ( NR > 1 ) print }'

【讨论】:

  • 不,他想要--color=always,因为他的问题是auto 在输出不是终端时禁用颜色(管道就是这种情况)。 (不是man ls吗?)
  • 我不确定awk 是否比tail -n +2 更有效。好吧,尽管如此,+1。
  • 您通常如何测试命令的效率?我只知道time,这给了我以下tailawk 解决方案。但是,由于这只是一个示例,我并不是说任何解决方案都比另一个更好。 real 0m0.005s user 0m0.004s sys 0m0.004s real 0m0.005s user 0m0.012s sys 0m0.000s
【解决方案2】:

ls -l --group-directories-first -X --color=always | tail -n +2

  • --group-directories-first - 有点明显
  • -X - 按扩展名排序
  • --color=always – 甚至在不写入 tty 时输出颜色(我们不这样做,因为我们正在通过管道发送到 head

【讨论】:

  • 你甚至没有检查这个命令。实际上,您的 head 并没有删除第一行。
  • 本可以纠正那个小错误,而不是浪费你的代表来否决我原本很好的答案。
【解决方案3】:

颜色可以使用ls --color=yes

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-30
    • 1970-01-01
    • 2015-02-05
    • 2020-10-11
    • 1970-01-01
    • 1970-01-01
    • 2014-10-10
    相关资源
    最近更新 更多