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

Bash如何按目录创建时间戳排序并存储目录列表

方案1:Git仓库场景(推荐)

你可以通过Git查询每个目录的首次提交时间作为创建时间依据,实现按目录实际创建顺序遍历:

dirs=''
# 按目录首次提交时间升序排列,跳过隐藏目录,兼容带空格的目录名
while IFS= read -r d; do
  dir_name=${d%/}
  tag="foobar:${dir_name}-${sha1}"
  dirs+="{\"app_image\":\"${tag}\",\"dir_name\":\"${dir_name}\"},"
done < <(find . -maxdepth 1 -type d ! -name '.' ! -path '*/\.*' -printf '%f\0' | xargs -0 -I {} sh -c 'echo "$(git log --diff-filter=A --follow --format=%at -- "{}" | tail -1) {}"' | sort -n | cut -d ' ' -f 2-)

# 可选:去掉最后多余的逗号
dirs=${dirs%,}

说明:

  • git log --diff-filter=A 只会返回该目录首次被添加到Git仓库的提交记录,完全匹配你要的「目录创建顺序」
  • 排序为升序,越早创建的目录越靠前,新创建的目录会自动排在列表末尾
  • 自动跳过隐藏目录,如果需要保留可以删除! -path '*/\.*'参数

方案2:通用文件系统场景

如果Git方案不满足需求,也可以直接读取文件系统的目录创建时间(部分旧系统不支持的话会自动降级为修改时间)排序:

dirs=''
while IFS= read -r -d '' d; do
  dir_name=${d%/}
  tag="foobar:${dir_name}-${sha1}"
  dirs+="{\"app_image\":\"${tag}\",\"dir_name\":\"${dir_name}\"},"
done < <(find . -maxdepth 1 -type d ! -name '.' ! -path '*/\.*' -printf '%C@ %f\0' | sort -zn | cut -zd ' ' -f 2-)

dirs=${dirs%,}

说明:

  • 使用\0作为分隔符,100%兼容带特殊字符、空格的目录名
  • %C@ 是目录的创建时间戳(部分Unix系统不支持出生时间时会返回最后修改时间)
  • 排序逻辑同样为升序,新目录会追加到列表末尾

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 20:27:00