С помощью zsh
:
zmodload zsh/datetime
autoload zmv
zmv -n '(**/)GMT(<->)*(.mp4)(#qD.)' '$1${(L)$(
strftime %A "$(strftime -r %Y%m%d $2)")}$3'
Удалите -n
, чтобы фактически выполнить переименование.
<->
соответствует любому десятичному числу. (...)
записан в $ 2
, (.mp4)
в $ 3
и в каталоге ( (** /)
, рекурсивный) в $ 1
. (# qD.)
- квалификатор glob, который выбирает только обычные файлы (.
: ни каталоги, ни символические ссылки, ни файлы / устройства ...), а также просматривать скрытые каталоги ( D
для dotfile / dotdir). $ {(L) ...}
: преобразует расширение в нижний регистр. strftime -r% Y% m% d
: reverse-strftime (strptime) для преобразования даты во время эпохи. strftime% A ...
: форматирование времени для этой эпохи с% A для полного дня недели. Остерегайтесь зависимости от локали. (во французском регионе вы получите французский будний день). В системе GNU и с оболочкой GNU ( bash
) вы можете сделать:
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 {} +
(удалить echo
для выполнения операции).
$ {var ,,}
является оператором bash
для преобразования в нижний регистр. date -d
является способом GNU date
для синтаксического анализа даты (например, strftime -r
выше).
В то время как zmv
проверял конфликты перед началом переименования любого файла, этот - нет. Поэтому мы добавляем выше -i
, чтобы, по крайней мере, дать вам шанс избежать затирания файлов. GNU mv
имеет параметр -v
, чтобы указать ему, что он собирается делать, что может быть полезно для отката команды позже, если что-то пойдет не так.