如何制作一个脚本来重命名图像和视频以及修改日期?

如何制作一个脚本来重命名图像和视频以及修改日期?

我有一个图库文件夹,其中的图像和视频以不需要的格式命名。我想制作一个脚本,扫描该目录中的每个文件,并在找到图像或视频时将其重命名为以下格式:“IMG_20190117_200445.jpg”Year,Month,Day_Hour,Minute,Second.Extension 与视频,但添加了视频扩展名。我怎样才能做到这一点 ?提前致谢。

答案1

这是一个我认为可以满足您要求的脚本。

我首先定义一个函数,它采用扩展名和类型(“IMG”或“VID”),用于find获取具有该扩展名的所有常规文件,循环遍历它们,用于stat确定它们的修改时间,date以确定新文件名,并重命名它们。

该脚本首先将该函数应用于各种图像扩展,然后应用于各种视频扩展。

#!/bin/bash

# a function to rename all files with a given extension
# takes two arguments: the extension, plus either "IMG" or "VID"
rename_ext() {
    # read the arguments to the function
    local ext="$1"
    local ftype="$2"
    # loop over all files with that extension
    while IFS= read -r -d '' filename ; do
        # read the (sub)directory name
        dirname="$(dirname "$filename")"
        # find the modification time
        modifytime="$(stat -c '%Y' "$filename")"
        # determine the new name
        local formatted="$(date +'%Y%m%d_%H%M%S' -d @$modifytime)"
        local newname="${ftype}_${formatted}.${ext}"
        # rename the file (and report that we are doing it)
        echo renaming "$filename" to "$dirname/$newname"
        mv -n "$filename" "$dirname/$newname"
    done < <(find -iname "*.$ext" -type f -print0)
}

# run the function on various image extensions
for ext in apng avif bmp gif jpeg jpg png tif webp ; do
    rename_ext "$ext" "IMG"
done

# run the function on various video extensions
for ext in avchd avif avi flv m2ts m4v mkv mov mp4 mpeg mpg mpv mts ogv qt vob webm wmv ; do
    rename_ext "$ext" "VID"
done

您可能想尝试一次并mv注释掉该行,以确保它符合您的预期。

您还可以考虑使用 exif 元数据而不是文件修改时间,但这会涉及更多一些。

相关内容