#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 }}} お疲れ様でした