画像とビデオの名前を変更し、日付を変更するスクリプトを作成するには?

画像とビデオの名前を変更し、日付を変更するスクリプトを作成するには?

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

おすすめ記事