我有一个图片库文件夹,其中有图像和视频,以不想要的格式命名。我想要做一个脚本,扫描该目录中的每个文件,当它找到图像或视频时,将其重命名为这样的格式:"IMG_20190117_200445.jpg“--年份、月份、Day_Hour、分钟、Second.Extension --与视频相同,但添加视频扩展名。我怎么能这么做?提前谢谢。
发布于 2022-09-25 04:26:07
这是一个脚本,我认为它可以按你的要求来做。
我首先定义了一个函数,它接受一个扩展名和一个类型( "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元数据而不是文件修改时间,但这涉及到了一些问题。
https://unix.stackexchange.com/questions/718587
复制相似问题