
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$3
und 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 (D
fü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 bash
dies der Operator zum Konvertieren in Kleinbuchstaben ist. date -d
wobei dies die GNU- date
Methode zum Parsen eines Datums ist (wie strftime -r
oben).
Während zmv
vor dem Umbenennen einer Datei nach Konflikten gesucht wird, tut dies dies nicht. Daher fügen wir -i
oben eins hinzu, um Ihnen zumindest die Möglichkeit zu geben, das Überschreiben von Dateien zu vermeiden. GNU mv
verfügt über eine -v
Option, 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.