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

如何在Bash中遍历文件树并导出文件路径与最后修改时间戳至CSV

没问题,用Bash的原生工具就能高效搞定百万级文件的这个需求,而且比写Node.js脚本更轻量。我来帮你完善思路,直接给出可运行的命令,还会处理CSV格式的细节问题(比如路径里的逗号、引号):

核心命令(直接可用)

# 替换成你的目标目录,比如 ./my-files 或者 /absolute/path/to/dir
find ./dir -type f \( -name '*.html' -o -name '*.jpg' -o -name '*.json' -o -name '*.png' -o -name '*.gif' \) \
  -printf '%p,%T@\n' | \
  sed -e 's/"/""/g' -e '/,/s/^/"/' -e '/,/s/$/"/' > file_list.csv

逐段解释

  1. find 部分

    • 用 \( ... \) 把所有 -name 条件括起来,确保 -type f(只找文件,不含目录)和所有文件名后缀条件同时生效(否则原逻辑会出错,可能把目录也混进来)。
    • 注意:你原来写的 -name '.png' 应该是 *.png,前者只会匹配文件名就是.png的文件,后者才是匹配所有PNG后缀的文件,我已经修正了这个小问题。
  2. -printf 输出格式

    • %p:输出文件的相对/绝对路径(取决于你find后面写的是相对还是绝对目录)
    • %T@:输出文件最后修改时间的Unix时间戳(带小数,精确到微秒),如果只需要秒级整数,换成 %Ts 即可。
    • 直接用find内置的-printf是关键——避免为每个文件启动新进程(比如调用stat),百万文件场景下性能提升非常明显。
  3. sed 处理CSV规范

    • s/"/""/g:把路径里的双引号替换成两个双引号(CSV的标准转义规则)
    • /,/s/^/"/ 和 /,/s/$/"/:如果路径里包含逗号,自动给整个路径加上双引号,防止逗号被当成CSV的列分隔符。

输出示例(符合CSV规范)

"dir/some/file with,comma.html",1699999999.123456
dir/some/file2.jpg,1699999999.789012
"dir/another file ""with quotes"".png",1700000000.345678

额外优化建议

  • 如果需要绝对路径,直接把find后面的./dir换成绝对路径(比如/home/user/my-files)即可。
  • 如果要处理所有文件(不限制后缀),去掉所有-name相关的条件就行。
  • 极端情况(比如路径里有换行符):可以用find ... -print0配合awk处理NUL分隔符,但这种场景非常少见,普通情况用上面的命令足够。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:52:27