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$3
e 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 (D
para 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.