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

如何轻松列出文件名及其最后修改日期?求排查脚本异常问题

简便列出文件名与最后修改日期的方法

不需要写脚本的话,直接用系统自带命令就能实现:

  • 用ls命令:ls -l会输出详细信息,包含修改日期;如果要更简洁的格式,可使用ls -lh --time-style=long-iso,其中-h是人性化显示文件大小,--time-style=long-iso会输出YYYY-MM-DD HH:MM格式的日期。
  • 用stat命令:stat -c "%n %y",其中%n代表文件名,%y代表最后修改日期(带时分秒);如果只需要日期部分,可换成%Y(仅日期)。
脚本问题排查(常见导致日期一致的原因)

你的脚本出现所有文件修改日期相同的问题,大概率是以下几种错误:

  1. 变量提前赋值,未在循环内更新
    错误示例:

    # 只在循环外获取了一次日期,后续循环复用这个值
    mod_date=$(stat -c "%y" "$file")
    for file in *; do
        echo "$file $mod_date"
    done
    

    修正方式:将日期获取逻辑放到循环内部,每次循环针对当前文件重新获取:

    for file in *; do
        mod_date=$(stat -c "%y" "$file")
        echo "$file $mod_date"
    done
    
  2. 错误使用固定文件路径
    如果脚本里硬编码了某个固定文件的路径,而非使用循环变量$file,会导致每次都读取同一个文件的日期:
    错误示例:

    for file in *; do
        # 始终读取"fixed_file.txt"的日期
        mod_date=$(stat -c "%y" ./fixed_file.txt)
        echo "$file $mod_date"
    done
    

    修正方式:把固定路径替换为循环变量$file,确保每次处理当前遍历到的文件。

  3. 误用无文件参数的date命令
    如果用date命令但没有加-r指定文件,date默认输出当前系统时间,自然所有文件的日期都显示为脚本运行时刻:
    错误示例:

    for file in *; do
        mod_date=$(date)
        echo "$file $mod_date"
    done
    

    修正方式:使用date -r "$file"获取文件的修改时间:

    for file in *; do
        mod_date=$(date -r "$file")
        echo "$file $mod_date"
    done
    
  4. 循环遍历逻辑错误
    如果你的循环是通过ls输出读取文件名(比如for file in $(ls)),当文件名包含空格或特殊字符时,可能会导致$file被拆分,进而无法正确获取对应文件的日期。建议直接用for file in *遍历目录,避免依赖ls的输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 09:30:49