Bash
如何製作一個腳本來重命名帶有修改日期的圖像和影片?
我有一個畫廊文件夾,其中包含以不需要的格式命名的圖像和影片。我想製作一個腳本,掃描該目錄中的每個文件,並在找到圖像或影片時將其重命名為以下格式:“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 元數據而不是文件修改時間,但這有點複雜。