You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

编写Shell脚本将Unix时间戳文件名转换为标准日期格式

批量将Unix时间戳命名的tar.gz文件重命名为日期格式

没问题,我来帮你搞定这个批量重命名的需求!下面是一个实用的Shell脚本,结合do-while循环实现你要的功能,还会帮你规避一些常见的坑(比如文件名含空格的情况)。

完整脚本

#!/bin/bash

# 遍历当前目录下所有以数字开头的.tar.gz文件(避免误处理其他文件)
find . -maxdepth 1 -type f -name "[0-9]*.tar.gz" | while read -r old_file; do
    # 提取文件名中的Unix时间戳(去掉.tar.gz后缀)
    timestamp=$(basename "$old_file" .tar.gz)
    
    # 验证时间戳是否有效(避免无效时间戳导致date命令报错)
    if ! date -d @"$timestamp" >/dev/null 2>&1; then
        echo "警告:无效时间戳 $timestamp,跳过文件 $old_file"
        continue
    fi
    
    # 将时间戳转换为YY_MM_DD_H_M_S格式的新文件名
    new_name=$(date -d @"$timestamp" +"%y_%m_%d_%H_%M_%S").tar.gz
    
    # 执行重命名操作,-v选项可以显示重命名过程
    mv -v "$old_file" "$new_name"
done

脚本细节解释

  • find命令-maxdepth 1确保只处理当前目录的文件(不递归子目录),-type f指定只处理文件,[0-9]*.tar.gz过滤出以数字开头的tar.gz文件,避免误操作其他命名的文件。
  • read -r-r选项防止文件名中的反斜杠被转义,完美处理文件名含空格的情况。
  • basename:用来提取文件名中的时间戳部分,比如1620000000.tar.gz会被处理成1620000000
  • 时间戳验证:通过date -d @"$timestamp"的返回值判断时间戳是否有效,无效的话会跳过并给出警告,避免脚本中断。
  • date格式参数%y是两位年份,%m两位月份,%d两位日期,%H24小时制小时,%M分钟,%S秒,组合起来正好是你需要的YY_MM_DD_H_M_S格式。
  • mv -v-v(verbose)选项会输出每一次重命名的详情,方便你确认操作是否正确。

使用方法

  1. 将上述脚本保存为rename_tar.sh
  2. 给脚本添加执行权限:chmod +x rename_tar.sh
  3. 进入存放tar.gz文件的目录,运行脚本:./rename_tar.sh

如果需要递归处理子目录里的文件,只需要去掉find命令中的-maxdepth 1参数即可。

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

火山引擎 最新活动