Jahr-Monat-Tag in Wochentag im Dateinamen umwandeln

Jahr-Monat-Tag in Wochentag im Dateinamen umwandeln

Ich muss die folgende Dateinamenstruktur nehmen und in den entsprechenden Wochentag umbenennen:

GMT20161003-randomtext.mp4

würde enden alsmonday.mp4

Ich habe viele dieser Dateien in verschiedenen Unterverzeichnissen, daher wäre es besser, wenn es rekursiv ausgeführt werden könnte ...

Antwort1

Mit zsh:

zmodload zsh/datetime
autoload zmv
zmv -n '(**/)GMT(<->)*(.mp4)(#qD.)' '$1${(L)$(
  strftime %A "$(strftime -r %Y%m%d $2)")}$3'

Entfernen Sie das -n, um die Umbenennung tatsächlich durchzuführen.

  • <->passt zu jeder Dezimalzahl.
  • Diese Sekunde (...)wird in $2, (.mp4)in $3und dem Verzeichnis ( (**/), rekursiv) in erfasst $1.
  • (#qD.)ist ein Glob-Qualifizierer, der nur auswähltregulärDateien ( .: keine Verzeichnisse, weder symbolische Links noch FIFOs/Geräte...) und durchsuchen Sie auch versteckte Verzeichnisse ( Dfür Dotfile/Dotdir).
  • ${(L)...}: wandelt die Erweiterung in Kleinbuchstaben um.
  • strftime -r %Y%m%d: reverse-strftime (strptime), um das Datum in eine Epochenzeit umzuwandeln.
  • strftime %A ...: Formatieren Sie die Zeit für diese Epochenzeit, wobei %A für den gesamten Wochentag steht. Beachten Sie, dass es vom Gebietsschema abhängig ist. (In einem französischen Gebietsschema erhalten Sie den französischen Wochentag.)

Auf einem GNU-System und mit der GNU-Shell ( bash) könnten Sie Folgendes tun:

find . -name 'GMT*-*.mp4' -type f -exec bash -c '
  for file do
    base=${file##*/}
    date=${base#GMT}
    date=${date%%-*}
    wday=$(date -d "$date" +%A)
    echo mv -i "$file" "${file%/*}/${wday,,}.mp4"
  done' bash {} +

(zum Ausführen des Vorgangs entfernen echo).

${var,,}wobei bashdies der Operator zum Konvertieren in Kleinbuchstaben ist. date -dwobei dies die GNU- dateMethode zum Parsen eines Datums ist (wie strftime -roben).

Während zmvvor dem Umbenennen einer Datei nach Konflikten gesucht wird, tut dies dies nicht. Daher fügen wir -ioben eins hinzu, um Ihnen zumindest die Möglichkeit zu geben, das Überschreiben von Dateien zu vermeiden. GNU mvverfügt über eine -vOption, mit der Sie angeben können, was es tun wird. Dies kann nützlich sein, um den Befehl später rückgängig zu machen, wenn etwas schiefgelaufen ist.

verwandte Informationen