com zsh :
zmodload zsh/datetime
autoload zmv
zmv -n '(**/)GMT(<->)*(.mp4)(#qD.)' '$1${(L)$(
strftime %A "$(strftime -r %Y%m%d $2)")}$3'
Remova o -n para realmente renomear.
-
<->corresponde a qualquer número decimal. - Esse segundo
(...)é capturado em$2,(.mp4)em$3e o diretório ((**/), recursivo) em$1. -
(#qD.)é um qualificador glob que seleciona apenas arquivos regulares (.: não diretórios, nem links simbólicos nem fifos / devices ...) e também percorre diretórios ocultos (Dpara dotfile / dotdir ). -
${(L)...}: converte a expansão para minúscula. -
strftime -r %Y%m%d: reverse-strftime (strptime) para converter a data em um horário de época. -
strftime %A ...: tempo de formatação para esse período de época com% A sendo o dia inteiro da semana. Cuidado, é localidade-dependente. (em um local francês, você terá o dia da semana em francês).
Em um sistema GNU, e com o shell GNU ( bash ), você poderia fazer:
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 {} +
(remova echo para realizar a operação).
${var,,} sendo o operador bash a converter para minúsculas. date -d é a maneira do GNU date de analisar uma data (como strftime -r acima).
Enquanto zmv verificaria conflitos antes de começar a renomear qualquer arquivo, este não seria. Por isso, adicionamos -i acima para, pelo menos, dar-lhe uma chance de evitar a destruição de arquivos. O GNU mv tem uma opção -v para dizer a ele para mostrar o que vai fazer, o que pode ser útil para reverter o comando mais tarde se algo der errado.