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

如何将ls -l文件目录列表按列排列并添加组权限后缀?

实现带组权限的多列文件列表展示

嘿,这个需求不难实现!我们可以通过组合几个常用的命令来搞定——用ls获取详细文件信息,awk提取并格式化内容,最后用column实现和ls一样的多列展示效果。直接上解决方案:

直接执行的命令

ls -l | awk '{
    # 提取权限字符串中的组权限部分(第4-6位)
    group_perm = substr($1, 4, 3)
    # 定位文件名的起始位置(处理带空格的文件名)
    name_start = index($0, $9)
    file_name = substr($0, name_start)
    # 输出要求的格式:文件名:组权限
    print file_name ":" group_perm
}' | column

命令拆解说明

  • ls -l:输出当前目录下文件/目录的详细信息,包含权限、所有者、组、文件名等核心字段
  • awk处理逻辑:
    • substr($1, 4, 3):从权限字符串(比如-rw-r--r--)的第4个字符开始截取3位,精准拿到组权限(例子里的r--)
    • index($0, $9) + substr(...):解决文件名带空格的问题——找到第9个字段(文件名的起始部分)在整行的位置,然后截取到行尾,确保完整获取带空格的文件名
    • print file_name ":" group_perm:拼接成你需要的格式
  • column:把所有格式化后的单行条目,按照终端宽度自动整理成整齐的多列布局,和ls默认的列展示效果完全一致

进阶:做成可复用脚本

如果需要频繁使用,可以把这段逻辑写成脚本:

  1. 创建脚本文件ls-group-perm:
#!/bin/bash

# 支持传入目录路径作为参数,比如 ./ls-group-perm /home/user/docs
ls -l "$@" | awk '{
    group_perm = substr($1, 4, 3)
    name_start = index($0, $9)
    file_name = substr($0, name_start)
    print file_name ":" group_perm
}' | column
  1. 给脚本添加执行权限:
chmod +x ls-group-perm
  1. 之后就可以像使用ls一样调用它:
# 查看当前目录
./ls-group-perm
# 查看指定目录
./ls-group-perm /path/to/your/dir

可选调整

  • 如果需要显示隐藏文件,把ls -l改成ls -la,如果要排除.和..,可以加过滤:
    ls -la | grep -v '^\.\.?$' | awk '{...}' | column
    
  • 想要自定义列宽度,可以给column加-c参数,比如column -c 100强制用100字符宽度分列

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:23:09