news 2026/9/13 10:41:44

如何用 coreutils du 的 --time birth 扩展查看文件创建时间?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
如何用 coreutils du 的 --time birth 扩展查看文件创建时间?

如何用 coreutils du 的 --time birth 扩展查看文件创建时间?

【免费下载链接】coreutilsCross-platform Rust rewrite of the GNU coreutils项目地址: https://gitcode.com/GitHub_Trending/co/coreutils

GNU 版的du --time只支持atime/ctime等取值,想在目录大小的汇总输出里同时看到文件的创建时间(birth time)做不到。uutils coreutils(本项目的 Rust 重写版)对du增加了扩展:--time参数接受birthcreation两个取值,用于显示创建时间,这一点在 扩展文档 中明确说明。本文围绕这一条命令展开:如何运行它、输出长什么样、时间格式怎么调,以及在哪些平台上会失败。

准备:安装 uutils coreutils

前提是拿到 uutils 版本的核心工具,而不是发行版自带的 GNU 版本。按 安装文档,用 Cargo 安装:

# Unix like cargo install coreutils --features unix --locked # Windows cargo install coreutils --features windows --locked

如果不想自行构建,Alpine、Arch、Debian、Fedora 等发行版也有打包好的uutils-coreutils/rust-coreutils包,具体命令以 docs/src/installation.md 为准。安装后du指向 uutils 版本时,--time=birth才可用。

执行:用 --time=birth 显示创建时间

基本用法是给--time直接带上取值:

du --time=birth <目录或文件路径>

creation是等价的别名,du --time=creation效果相同。注意该参数要求取值紧跟等号(实现上设置了require_equals,见 du.rs 中的参数定义),--time birth这种空格写法不被接受;取值也支持atime(别名accessuse)和ctime(别名status),本场景只关心birth/creation

输出为三列、以 Tab 分隔:换算后的大小、时间戳、路径。时间列按本地时区格式化(项目测试中通过设置TZ=UTC来固定输出),默认风格为long-iso,形如YYYY-MM-DD HH:MM。以 测试文件 中的--time用例为例(文档示例,时间值取决于实际文件的创建时间):

0 2016-06-16 00:00 date_test

测试里对--time=birth的断言就是检查时间列匹配正则[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2},即YYYY-MM-DD HH:MM这个形状,而不是某个固定时间值。

调整时间显示格式

--time-style控制时间列的格式,取值与date风格类似(见 du 错误信息定义 中列出的合法参数):

du --time=birth --time-style=full-iso ./mydir # 完整 ISO,含秒与偏移 du --time=birth --time-style=iso ./mydir # 仅 YYYY-MM-DD du --time=birth --time-style=+%Y-%m-%d ./mydir # date 风格自定义

full-iso对应的文档示例输出(来自测试,仅作格式参考):

0 2016-06-16 00:00:00.000000000 +0000 date_test

未显式指定--time-style时,程序会回落到环境变量TIME_STYLE(前缀posix-会被剥离),再否则使用默认的long-iso(见 du.rs 中 parse_time_style)。

验证与失败判断

正常成功的判断依据是:命令退出码为 0,且每行输出的第二列是时间字符串。两种异常情形在源码和文案里都有明确定义:

  1. 平台不支持:如果运行平台不提供创建时间,命令直接报错,错误文案见 en-US.ftl:

    du: 'birth' and 'creation' arguments for --time are not supported on this platform.

    创建时间的底层获取依赖 Rust 标准库的Metadata::created()(见 fsext.rs 中MetadataTimeField::Birth => md.created().ok()),所以是否可用取决于平台和文件系统是否报告 birth time。

  2. 个别条目取不到时间:时间列会打印???占位,而不是整条命令失败(见 du.rs 中 print_stat)。项目测试中 Windows 平台对不支持的字段(如 ctime)就是断言0 ??? date_test这一形状(文档示例)。

如果你想在脚本里自动校验时间列格式,可复用测试的做法:对--time=birth的输出按行匹配^[0-9]+\t[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}\t(默认long-iso风格下)。

限制说明

  • du --time对目录显示的是目录内所有文件中“最新”的那个对应时间(源码中各条目的时间取max累并到父目录),所以目录行的创建时间列实际反映的是其内容里最晚的创建时间,这与 帮助文案 中 “time of the last modification of any file in the directory, or any of its subdirectories” 的描述方式一致。
  • --time只接受atimectimecreation/birth这几组取值,写错取值或给出空的--time=(含TIME_STYLE为空字符串的情况)都会报错,例如du: invalid argument '' for 'time style'(见 test_du_time_style_empty)。
  • 该功能是 uutils 相对 GNU 的扩展,GNUdu不支持--time=birth;在依赖 GNU 行为的脚本中引入它需要留意兼容性。

du的这条扩展就是为“列目录大小时顺便看到创建时间”这一场景设计的,命令形态、格式参数与失败表现如上,更多 GNU 扩展差异可继续查 docs/src/extensions.md。

【免费下载链接】coreutilsCross-platform Rust rewrite of the GNU coreutils项目地址: https://gitcode.com/GitHub_Trending/co/coreutils

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/13 10:39:19

Android APK包体积优化实战:从88MB到51MB的全程复盘

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/13 10:36:25

Python编程入门:第一次作业全攻略与避坑指南

1. Python第一次作业&#xff1a;从零开始的编程初体验作为编程入门的第一道门槛&#xff0c;Python第一次作业往往承载着特殊的意义。记得十年前我刚接触编程时&#xff0c;面对空白编辑器的那种既兴奋又忐忑的心情&#xff0c;和现在学生们初次完成Python作业时的状态如出一辙…

作者头像 李华
网站建设 2026/9/13 10:36:09

Java数据类型与运算符核心解析

1. Java数据类型与运算符基础概述作为Java编程语言的入门核心内容&#xff0c;数据类型和运算符构成了程序逻辑的基石。当我十年前第一次接触Java时&#xff0c;这一部分看似简单却暗藏玄机。数据类型决定了变量能存储什么以及如何存储&#xff0c;而运算符则定义了数据之间的操…

作者头像 李华