如何用Bash脚本给批量图片按自定义起始时间逐秒递增重命名
Bash脚本实现图片按自定义起始时间逐秒递增重命名
以下是满足需求的Bash脚本,支持指定自定义起始时间,将有序编号的图片按「DD-MM-YYYY HH-MM-SS.png」格式逐秒递增重命名:
脚本代码
#!/bin/bash # 参数检查 if [ $# -lt 1 ]; then echo "用法: $0 <起始时间> [图片匹配模式]" echo "示例: $0 '19-10-2022 17-35-10' '*.png'" exit 1 fi START_TIME="$1" IMAGE_PATTERN="${2:-*.png}" # 将输入的时间格式转换为date可识别的格式,再转成Unix时间戳 FORMATTED_START=$(echo "$START_TIME" | sed -E 's/([0-9]{2})-([0-9]{2})-([0-9]{4})/\3-\2-\1/; s/-/:/g') TIMESTAMP=$(date -d "$FORMATTED_START" +%s) # 验证时间戳有效性 if [ -z "$TIMESTAMP" ]; then echo "错误: 起始时间格式错误,请使用 'DD-MM-YYYY HH-MM-SS' 格式" exit 1 fi # 按自然数字顺序遍历图片文件 for img in $(ls -v $IMAGE_PATTERN); do # 生成目标文件名 NEW_NAME=$(date -d "@$TIMESTAMP" +"%d-%m-%Y %H-%M-%S.png") # 避免覆盖已存在文件 if [ -f "$NEW_NAME" ]; then echo "警告: $NEW_NAME 已存在,跳过 $img" continue fi mv "$img" "$NEW_NAME" echo "已重命名: $img -> $NEW_NAME" # 时间戳逐秒递增 TIMESTAMP=$((TIMESTAMP + 1)) done
使用说明
- 保存脚本:将上述代码保存为
rename_images.sh,并赋予执行权限:chmod +x rename_images.sh - 基础用法:指定起始时间,重命名当前目录下所有PNG图片:
./rename_images.sh '19-10-2022 17-35-10' - 自定义图片类型:如果是JPG图片,可添加第二个参数:
./rename_images.sh '19-10-2022 17-35-10' '*.jpg'
关键特性
- 有序遍历:通过
ls -v实现自然数字排序,确保1.png、2.png...依次处理 - 时间递增:基于Unix时间戳逐秒累加,避免日期时间计算的复杂逻辑
- 安全校验:检查目标文件是否存在,防止覆盖已有数据
- 格式兼容:自动转换输入时间格式,适配
date命令的识别规则
内容的提问来源于stack exchange,提问作者J. Castelli
相关产品推荐
相关产品推荐

