随机
Enter 搜索 ↑↓ 切换 Esc 清空

linux_ls

脚本

Linux 文件列表 美化工具

linux_ls

Linux 文件列表 美化工具

一键脚本

bash <(curl -sL gitee.com/meimolihan/linux-command_sh/raw/master/linux_ls.sh) /var/lib/vz/dump
功能模式 执行命令 作用说明
默认查看当前目录 ./list-dir.sh 彩色美化展示当前目录文件(按时间排序)
指定目录查看 ./list-dir.sh /data/www 美化展示指定目录文件列表
实用示例 ./list-dir.sh /root 查看 /root 目录美化版文件清单
展示效果 - 彩色权限、大小、用户、时间、文件名,清晰易读
排序规则 - 修改时间倒序展示,最新文件排在最前

效果预览

执行脚本效果预览

补充说明

该脚本用于美化显示目录文件列表,基于 statfinddu 命令实现,适合需要替代原生 ls 命令、追求更清晰输出格式的场景。

功能特点

输出说明

脚本输出包含以下字段:

字段 说明
路径 显示当前查看的目录路径
总计 目录占用的总磁盘空间
权限 文件权限,如 -rw-r--r--
链接 硬链接数量
所有者 文件所属用户
文件所属组
大小 文件大小(自动适配单位)
修改时间 文件最后修改时间,格式 YYYY-MM-DD HH:MM:SS
文件名 文件名(紫色高亮)

参数示例

# 查看当前目录
bash linux_ls.sh

# 查看指定目录
bash linux_ls.sh /var/log
bash linux_ls.sh /etc

注意事项

脚本源码

#!/bin/bash
set -uo pipefail

gl_hui=$'\033[38;5;59m'
gl_huang=$'\033[38;5;11m'
gl_hong=$'\033[38;5;9m'
gl_lan=$'\033[38;5;32m'
gl_lv=$'\033[38;5;10m'
gl_qing=$'\033[38;5;14m'
gl_zi=$'\033[38;5;13m'
gl_bai=$'\033[38;5;15m'
gl_bufan=$'\033[38;5;14m'
reset=$'\033[0m'

break_end() {
    echo -e "${gl_bufan}————————————————————————————————————————————————${reset}"
    echo -e "${gl_lv}操作完成${reset}"
    echo -e "${gl_bai}按任意键继续 ${gl_hong}.${gl_huang}.${gl_lv}.${reset}\c"
    read -r -n 1 -s
    echo ""
    clear
}

list_beautify_directory() {
    local target_dir="${1:-.}"
    [[ -d "$target_dir" ]] || {
        echo -e "${gl_hong}错误:目录不存在 → $target_dir${reset}"
        return 1
    }

    clear
    echo -e "${gl_zi}>>> 目录文件列表(按时间排序)${reset}"
    echo -e "${gl_bufan}————————————————————————————————————————————————${reset}"
    echo -e "${gl_lan}路径:${gl_huang}${target_dir}${reset}"
    echo -e "${gl_bufan}————————————————————————————————————————————————${reset}"

    # 总大小
    du -sh "$target_dir" 2>/dev/null | awk -v qing="$gl_qing" -v rst="$reset" \
        '{print qing "总计 " $1 rst}'

    # 核心:不用 ls,直接用 stat
    find "$target_dir" -maxdepth 1 -type f -printf '%T@ %p\0' |
    sort -zn |
    while IFS= read -r -d '' line; do
        mtime="${line%% *}"
        file="${line#* }"

        stat --format="%A %h %U %G %s" "$file" | awk \
            -v hui="$gl_hui" \
            -v huang="$gl_huang" \
            -v lan="$gl_lan" \
            -v lv="$gl_lv" \
            -v qing="$gl_qing" \
            -v zi="$gl_zi" \
            -v rst="$reset" \
            -v mtime="$mtime" \
            -v fname="$(basename "$file")" '
        {
            size=$5
            if (size >= 1073741824)
                size=sprintf("%.1fG", size/1073741824)
            else if (size >= 1048576)
                size=sprintf("%.1fM", size/1048576)
            else if (size >= 1024)
                size=sprintf("%.1fK", size/1024)
            else
                size=size "B"

            cmd="date -d @" mtime " \"+%F %T\""
            cmd | getline ctime
            close(cmd)

            printf "%s%-12s%s %s%4s%s %s%-8s%s %s%-8s%s %s%6s%s %s%-19s%s %s%s%s\n",
                hui, $1, rst,
                huang, $2, rst,
                lan, $3, rst,
                lv, $4, rst,
                huang, size, rst,
                qing, ctime, rst,
                zi, fname, rst
        }'
    done
}

main() {
    list_beautify_directory "${1:-.}"
    break_end
}

main "$@"

创建本地脚本

new_script="new_test.sh"

cat > "$new_script" << 'EOF'
#!/bin/bash

# 粘贴脚本源码

EOF

chmod +x "$new_script" && ./"$new_script" && rm -f "$new_script"