#author("2020-07-10T06:16:48+09:00","default:nobuoki","nobuoki")
#author("2020-07-10T06:20:25+09:00","default:nobuoki","nobuoki")
* msys2でファイルの作成日をExifを元に修正する [#q49fafc1]

方針:
- exiftool でExifを取得、加工する
- powershell でファイル作成日を修正
-- Set-ItemProperty.CreationTime


** exiftool を入れる [#cc1a42ec]

perl5 の Image::ExifTool を入れます
cpanm を使うならこうです

#prism(bash){{{
$ curl -L -O http://xrl.us/cpanm | perl cpanm App::cpanminus
$ cpanm Image::ExifTool
}}}

今回は Title を使うことにします
Exif見てみます
#prism(bash){{{
$ exiftool MORNING-GATE_20200529.m4a | grep -e ^Title -e Date

File Modification Date/Time     : 2020:06:05 05:42:55+09:00
File Access Date/Time           : 2020:07:10 06:18:08+09:00
File Inode Change Date/Time     : 2020:06:05 05:42:55+09:00
Create Date                     : 0000:00:00 00:00:00
Modify Date                     : 2020:06:04 20:42:53
Track Create Date               : 0000:00:00 00:00:00
Track Modify Date               : 0000:00:00 00:00:00
Media Create Date               : 0000:00:00 00:00:00
Media Modify Date               : 0000:00:00 00:00:00
Title                           : MORNING-GATE_20200529_0650
Content Create Date             : 2020:05:29
}}}

普通は Media Create Date あたりを使うのでしょうけど、今回は Title を使うことにします
#prism(bash){{{
$ ls
 MORNING-GATE_20200529.m4a   サブカルチャーはじめました_20200531.m4a  '福島和可菜のLET'\''S-GO!GO-OUT-SUNDAY!!_20200531.m4a'

# exiftool * | grep ^Title
Title                           : MORNING-GATE_20200529_0650
Title                           : サブカルチャーはじめました_20200531_1900
Title                           : 福島和可菜のLET'S-GO!GO-OUT-SUNDAY!!_20200531_0900
}}}

** 日時の文字列を変換 [#fb9de6a9]
MORNING-GATE_20200529_0650 -> 2020/06/04 06:50
#prism(bash){{{
$ exiftool MORNING-GATE_20200529.m4a | grep ^Title | grep -oEe '[0-9]{8}' -e '[0-9]{4}' | xargs | sed -r 's;^(....)(..)(..);\1/\2/\3;' | sed -r 's/(..)(..)$/\1:\2/'
2020/05/29 06:50
}}}

改行入れます

#prism(bash){{{
$ exiftool MORNING-GATE_20200529.m4a | \
# タイトル行を抜き出す
grep ^Title                          | \
# 20200529 と 0650 を抜き出す(改行される)
grep -oEe '[0-9]{8}' -e '[0-9]{4}'   | \
# 20200529 と 0650 を1行に並べる
xargs                                | \
# 20200529 -> 2020/05/29
sed -r 's;^(....)(..)(..);\1/\2/\3;' | \
# 0650 -> 06:50
sed -r 's/(..)(..)$/\1:\2/'

2020/05/29 06:50
}}}

** powershell でファイル作成日を変更する [#sb581ddc]

echo を入れて一旦コマンドを表示させてみます

#prism(bash){{{
$ for f in *.m4a; do echo powershell -Command Set-ItemProperty \"${f}\" -name CreationTime -value \'$(exiftool $f | grep ^Title | grep -oEe '[0-9]{8}' -e '[0-9]{4}' | xargs | sed -r 's;^(....)(..)(..);\1/\2/\3;' | sed -r 's/(..)(..)$/\1:\2/')\'; done
powershell -Command Set-ItemProperty "MORNING-GATE_20200529.m4a" -name CreationTime -value '2020/05/29 06:50'
powershell -Command Set-ItemProperty "サブカルチャーはじめました_20200531.m4a" -name CreationTime -value '2020/05/31 19:00'
powershell -Command Set-ItemProperty "福島和可菜のLET'S-GO!GO-OUT-SUNDAY!!_20200531.m4a" -name CreationTime -value '2020/05/31 09:00'
}}}

ハマりポイント:
- ファイル名は「"」(ダブルクォーテーション)で括る
- 日時パラメータは「'」(シングルクォーテーション)で括る

これに気づくまでちょっと時間を費やしてしまいました・・・
それでは echo を外して実行してみます
(set -x を入れて、何がどうエスケープされているかも見てみます)
#prism(bash){{{
$ set -x; for f in *.m4a; do powershell -Command Set-ItemProperty \"${f}\" -name CreationTime -value \'$(exiftool $f | grep ^Title | grep -oEe '[0-9]{
8}' -e '[0-9]{4}' | xargs | sed -r 's;^(....)(..)(..);\1/\2/\3;' | sed -r 's/(..)(..)$/\1:\2/')\'; done; set +x

+ for f in *.m4a
++ exiftool MORNING-GATE_20200529.m4a
++ grep '^Title'
++ grep -oEe '[0-9]{8}' -e '[0-9]{4}'
++ xargs
++ sed -r 's;^(....)(..)(..);\1/\2/\3;'
++ sed -r 's/(..)(..)$/\1:\2/'
+ powershell -Command Set-ItemProperty '"MORNING-GATE_20200529.m4a"' -name CreationTime -value ''\''2020/05/29' '06:50'\'''

+ for f in *.m4a
++ exiftool サブカルチャーはじめました_20200531.m4a
++ grep '^Title'
++ grep -oEe '[0-9]{8}' -e '[0-9]{4}'
++ xargs
++ sed -r 's;^(....)(..)(..);\1/\2/\3;'
++ sed -r 's/(..)(..)$/\1:\2/'
+ powershell -Command Set-ItemProperty '"サブカルチャーはじめました_20200531.m4a"' -name CreationTime -value ''\''2020/05/31' '19:00'\'''

+ for f in *.m4a
++ exiftool '福島和可菜のLET'\''S-GO!GO-OUT-SUNDAY!!_20200531.m4a'
++ grep '^Title'
++ grep -oEe '[0-9]{8}' -e '[0-9]{4}'
++ xargs
++ sed -r 's;^(....)(..)(..);\1/\2/\3;'
++ sed -r 's/(..)(..)$/\1:\2/'
+ powershell -Command Set-ItemProperty '"福島和可菜のLET'\''S-GO!GO-OUT-SUNDAY!!_20200531.m4a"' -name CreationTime -value ''\''2020/05/31' '09:00'\'''
+ set +x

}}}

お疲れ様でした

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS