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

批量生成含目录名与原始时间戳的tar文件技术问询

批量生成带目录名+时间戳的tar包方案

我帮你搞定这个批量打包的需求!这里有个实用的bash脚本,可以自动遍历目标目录下的所有子目录,提取它们的修改时间(就是你ls看到的那个时间),然后生成符合目录名_小写月份_日_年.tar格式的打包文件。

实现脚本

#!/bin/bash

# 遍历当前目录下的所有子目录(要处理指定目录的话,把*/换成/path/to/your/target/*/)
for dir in */; do
    # 去掉目录名末尾的斜杠,得到干净的目录名称
    dir_name=${dir%/}
    
    # 提取目录的修改时间,并转换成jul_29_2016这样的格式
    # 步骤:先获取ISO格式时间→转成月份缩写+日+年→转小写→去掉日期前的空格
    timestamp=$(date -d "$(stat -c "%y" "$dir_name")" +"%b_%e_%Y" | tr '[:upper:]' '[:lower:]' | sed 's/_ /_/')
    
    # 拼接最终的tar文件名
    tar_filename="${dir_name}_${timestamp}.tar"
    
    # 执行打包操作(如果需要压缩,把-cf改成-czf(gzip)或-cjf(bzip2))
    tar -cf "$tar_filename" "$dir_name"
    
    # 输出日志,方便确认进度
    echo "已完成打包:$tar_filename"
done

关键部分解释

  • 遍历目录:for dir in */; 会匹配当前目录下所有以斜杠结尾的项,也就是所有子目录,避免处理普通文件。
  • 提取时间戳:
    • stat -c "%y" "$dir_name":获取目录的修改时间(和ls -ld显示的时间一致),输出类似2016-07-29 14:30:00的ISO格式。
    • date -d ... +"%b_%e_%Y":把ISO时间转换成Jul 29 2016的格式,其中%b是月份缩写,%e是日期(空格填充),%Y是四位年份。
    • tr和sed:把月份转成小写,同时去掉日期前面的空格(比如把jul_ 5_2024改成jul_5_2024)。
  • 打包命令:tar -cf是基础打包,如果需要压缩,换成tar -czf会生成.tar.gz压缩包,tar -cjf生成.tar.bz2压缩包。

注意事项

  • 如果要处理指定路径下的目录,把循环里的*/替换成目标路径,比如/data/backup/*/。
  • 要是有需要排除的目录,可以在循环里加判断,比如:
    if [ "$dir_name" = "temp" ] || [ "$dir_name" = "logs" ]; then
        echo "跳过目录:$dir_name"
        continue
    fi
    
  • 确保你有足够的权限读取目标目录和在当前路径创建tar文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:27:43