不要な形式で名前が付けられた画像とビデオを含むギャラリーフォルダがあります。そのディレクトリ内のすべてのファイルを検索して画像やビデオを見つけたら、「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メタデータを使用することを検討することもできますが、これはもう少し複雑です。