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

KornShell中ls命令显示人类可读文件大小的问题求助

解决KornShell中ls无法显示可读文件大小的问题

你的问题根源在于部分Unix/Linux系统(如老版AIX、Solaris或BSD)自带的ls并非GNU版本,不支持-h或--block-size这类简化文件大小显示的参数。以下是几种可行的解决办法:

1. 使用GNU ls(如果可用)

很多系统会把GNU coreutils的工具以g前缀命名,比如gls。如果你的环境安装了GNU coreutils,直接替换脚本中的ls为gls即可:

# 遍历目标目录并列出文件(带可读大小)
for target_dir in /path/to/dir1 /path/to/dir2; do
    cd "$target_dir" || continue  # 切换目录失败则跳过
    gls -lrt --human-readable
done

如果不确定是否有gls,可以执行which gls或gls --version验证。

2. 用stat+自定义函数转换大小

如果没有GNU ls,可借助stat命令获取原始字节数,再通过自定义KornShell函数转换为可读格式:

# 定义字节转可读格式的函数
human_readable_size() {
    local byte_count=$1
    local -a suffixes=("B" "k" "M" "G" "T")
    local idx=0

    while (( byte_count >= 1024 && idx < ${#suffixes[@]}-1 )); do
        byte_count=$(( byte_count / 1024 ))
        (( idx++ ))
    done

    echo "${byte_count}${suffixes[$idx]}"
}

# 遍历目录处理文件
for target_dir in /path/to/dir1 /path/to/dir2; do
    cd "$target_dir" || continue
    # 注意:不同系统的stat参数可能不同,以下是GNU stat的格式
    # BSD系统请替换为:stat -f "%N %z %Sm" *
    stat -c "%y %s %n" * | while read -r mtime size filename; do
        readable_size=$(human_readable_size "$size")
        echo "$mtime $readable_size $filename"
    done | sort -k1,1  # 按修改时间排序,模拟ls -rt的效果
done

3. 用awk处理ls输出(应急方案)

如果上述工具都不可用,可以直接解析ls -lrt的输出,用awk将字节数字段转换为可读格式:

# 遍历目录并处理ls输出
for target_dir in /path/to/dir1 /path/to/dir2; do
    cd "$target_dir" || continue
    ls -lrt | awk '
        # awk内部的转换函数
        function humanize(num) {
            split("B k M G T", suff)
            for(i=1; num>=1024 && i<5; i++) {
                num /= 1024
            }
            return sprintf("%.1f%s", num, suff[i])
        }
        BEGIN {OFS=" "}
        # 跳过total行,修改第5个字段(字节数)后打印整行
        !/^total/ { $5 = humanize($5); print }
    '
done

注意:这种方法在文件名包含空格时可能出错,优先推荐前两种方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 02:38:22