Benennen Sie Dateiordner basierend auf dem Dateiinhalt um

Benennen Sie Dateiordner basierend auf dem Dateiinhalt um

Ich habe einen Ordner mit Markdown-Dateien – ich muss die Dateien stapelweise umbenennen. Ich muss ein Datum voranstellen und das Datum steht in der Datei in diesem Format:

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

Ich habe es geschafft, einen Weg zu finden, das Datum mit awk abzurufen. Ich kann anscheinend nicht die richtige Zauberformel finden, um dieses Datum dann aus awk zu nehmen und die Datei damit umzubenennen. Vorgesehenes Benennungsschema:

OLD FILE
Title-of-blog-article.md

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

In diesem Ordner befinden sich über 150 Dateien. Ich habe Bash für Schleifen ausprobiert und es mit mv und echo getestet. Bisher ändert sich die awk-Variable in der Schleife nie, sondern verwendet nur das Feld aus der allerersten Datei. Ich brauche also definitiv Hilfe.

Antwort1

Wahrscheinlich nicht sehr effizient, aber wie wäre es mit

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

Entfernen Sie es, echosobald Sie zufrieden sind, dass es das Richtige tut.

verwandte Informationen