ファイルの内容に基づいてファイルのフォルダ名を変更する

ファイルの内容に基づいてファイルのフォルダ名を変更する

マークダウン ファイルのフォルダーがあります。ファイルの名前を一括変更する必要があります。日付を先頭に追加する必要があり、日付はファイル内に次の形式で含まれています。

----
Title: Title-of-blog-article
Date: 2012-03-07

awk を使用して日付を取得する方法を見つけました。awk から日付を取得して、それを使用してファイルの名前を変更する適切な方法が見つからないようです。意図した命名スキーム:

OLD FILE
Title-of-blog-article.md

NEW FILE
2012-03-07-Title-of-blog-article.md

このフォルダには 150 以上のファイルがあります。bash for ループを試し、mv と echo でテストしました。これまでのところ、ループでは awk 変数は変更されず、最初のファイルのフィールドのみが使用されます。そのため、間違いなく助けが必要です。

答え1

あまり効率的ではないかもしれませんが、

for f in *; do 
  d=$(awk '/^Date:/ {print $2; exit}' "$f")
  [[ -n "$d" ]] && echo mv --no-clobber -- "$f" "${d}-${f}"
done

echo正しく動作していることに満足したら、削除します。

関連情報