Converter ano-mês-dia em dia da semana no nome do arquivo

Converter ano-mês-dia em dia da semana no nome do arquivo

Preciso pegar a seguinte estrutura de nome de arquivo e renomear para o dia da semana apropriado:

GMT20161003-randomtext.mp4

acabaria comomonday.mp4

Eu tenho muitos desses arquivos em vários subdiretórios, então seria melhor se pudessem ser executados recursivamente...

Responder1

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 -npara 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 global que seleciona apenasregulararquivos ( .: 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úsculas.
  • strftime -r %Y%m%d: Reverse-strftime (strptime) para converter a data em uma época.
  • strftime %A ...: formate a hora para aquela época, com %A sendo para o dia da semana completo. Cuidado, depende da localidade. (em uma localidade francesa, você receberá 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 echopara realizar a operação).

${var,,}sendo basho operador para converter para minúsculas. date -dsendo a datemaneira GNU de analisar uma data (como strftime -racima).

Embora zmvfosse verificar se há conflitos antes de começar a renomear qualquer arquivo, este não o faria. Portanto, adicionamos um -iitem acima para, pelo menos, dar a você a chance de evitar a destruição de arquivos. O GNU mvtem a -vopção de mostrar o que fará, o que pode ser útil para reverter o comando mais tarde, se algo der errado.

informação relacionada