Bash

如何製作一個腳本來重命名帶有修改日期的圖像和影片?

  • September 25, 2022

我有一個畫廊文件夾,其中包含以不需要的格式命名的圖像和影片。我想製作一個腳本,掃描該目錄中的每個文件,並在找到圖像或影片時將其重命名為以下格式:“IMG_20190117_200445.jpg”Year,Month,Day_Hour,Minute,Second.Extension 與影片,但添加了影片擴展。我怎樣才能做到這一點 ?提前致謝。

這是一個我認為可以滿足您要求的腳本。

我首先定義一個帶有副檔名和類型(“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