web-dev-qa-db-ja.com

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

次の形式のファイル名の写真でいっぱいのディレクトリがあります:IMG-20160305-WA0001.jpg。取得した日付は明らかにファイルタイトルにあります。残念ながら、すべてのファイルで変更された日付は今日です。それらを正しい日付に戻したいのですが。

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

7
Jodel

日付を抽出するためだけにbash文字列操作を使用する例:

#!/bin/bash

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

あなたの例から、すべてのファイルhave有効なyyyymmdd dateと仮定すると、ファイル名から日付を抽出し、引用されたコマンドでそれを適用できます。 :

#!/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でテストできます。

2
Thomas Dickey