You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让ls命令仅显示修改日期、时间及文件名并保持列对齐?

解决方案

一、修正sed命令移除多余列

你之前的sed命令没去掉第二列数字,是因为sed默认不支持\d匹配数字,得换成[0-9]或[[:digit:]],同时要精准匹配前两列(权限+链接数)。用扩展正则表达式(-E参数)更简洁:

ls -goh | sed -E 's/^[^ ]+ +[0-9]+ +//'

解释:

  • ^[^ ]+:匹配开头的非空格字符(权限列)
  • + +:匹配列之间的一个或多个空格
  • [0-9]+:匹配第二列的数字(链接数)
    替换为空后,就剩下大小、修改日期、时间和文件名。

二、用awk实现对齐输出

要实现列对齐,用awk的printf格式化输出更可靠,直接处理ls -lh的输出(-h生成人类可读的大小格式):

ls -lh | awk '{
    size = $5
    month = $6
    day = $7
    time = $8
    # 提取含空格的完整文件名
    name = substr($0, index($0, $9))
    # 格式化输出:大小右对齐占6位,月份3位,日期2位,时间5位,文件名左对齐
    printf "%6s %3s %2s %5s %s\n", size, month, day, time, name
}'

执行后会得到你想要的对齐效果:

28M Mar 29 12:03 foo.dmg
 96B Feb  9 15:33 bar.app
128B May 16 01:59 aaa
160B May 16 01:59 bbb

更简洁的替代方案

如果不需要ls -goh的额外参数,直接用awk提取目标列更省心,不用处理sed的正则问题:

ls -lh | awk '{printf "%6s %3s %2s %5s %s\n", $5, $6, $7, $8, substr($0, index($0,$9))}'

内容的提问来源于stack exchange,提问作者user22996855

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 00:42:45