ファイル名の日付に基づいてファイルの変更日を変更します。

ファイル名の日付に基づいてファイルの変更日を変更します。

次の形式のファイル名を持つ写真でいっぱいのディレクトリがあります IMG-20160305-WA0001.jpg。撮影日はファイルタイトルにはっきりと表示されます。残念ながら、すべてのファイルには今日の修正日があります。正しい日付にリセットしたいです。

私はbash名前の日付部分を抽出し、touch -a -m -t 201603050900 IMG-20160305-WA0000.jpg各ファイルの日付部分を順番に抽出するスクリプトを考えています(各ファイルに正しい日付を使用)。時間は重要ではありません。

答え1

bash文字列操作のみを使用して日付を抽出する例:

#!/bin/bash

for name in IMG-[0-9]*.jpg; do
    touch -amt ${name:4:8}0900 "$name"
done

答え2

あなたの例ですべてのファイルを仮定すると持つ効果的なyyyymmdd日付、ファイル名から日付を抽出して、引用符付きコマンドに適用できます。

#!/bin/bash
for name in IMG-*-W*.jpg
do
    date="$(echo "$name" | sed -e 's/^IMG-//' -e 's/-W.*//')"
    touch -a -m -t ${date}0900 "$name"
done

一部の文書に有効期限がない場合は、追加の作業が必要です。ただし、bashで正規表現を使用してテストできます。

関連情報