Переименовать папку с файлами на основе их содержимого

Переименовать папку с файлами на основе их содержимого

У меня есть папка с файлами markdown - мне нужно переименовать ФАЙЛЫ в пакетном режиме. Мне нужно добавить дату, и дата находится внутри файла в следующем формате:

----
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 loops и тестировал его с 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как только убедитесь, что он работает правильно.

Связанный контент