Convertir año-mes-día a día laborable en nombre de archivo

Convertir año-mes-día a día laborable en nombre de archivo

Necesito tomar la siguiente estructura de nombre de archivo y cambiarle el nombre al día apropiado de la semana:

GMT20161003-randomtext.mp4

terminaría comomonday.mp4

Tengo muchos de estos archivos en varios subdirectorios, por lo que sería mejor si pudieran ejecutarse de forma recursiva...

Respuesta1

Con zsh:

zmodload zsh/datetime
autoload zmv
zmv -n '(**/)GMT(<->)*(.mp4)(#qD.)' '$1${(L)$(
  strftime %A "$(strftime -r %Y%m%d $2)")}$3'

Elimine el -npara realizar el cambio de nombre.

  • <->coincide con cualquier número decimal.
  • Ese segundo (...)se captura en $2, (.mp4)en $3y el directorio ( (**/), recursivo) en $1.
  • (#qD.)es un calificador global que solo seleccionaregulararchivos ( .: no directorios, ni enlaces simbólicos ni fifos/dispositivos...) y también atravesar directorios ocultos ( Dpara dotfile/dotdir).
  • ${(L)...}: convierte la expansión a minúsculas.
  • strftime -r %Y%m%d: inversa-strftime (strptime) para convertir la fecha a una época de época.
  • strftime %A ...: formatea la hora para esa época siendo %A el día completo de la semana. Tenga en cuenta que depende de la configuración regional. (en una configuración regional francesa, obtendrá el día de la semana en francés).

En un sistema GNU, y con el shell GNU ( bash), podrías hacer:

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 {} +

(retirar echopara realizar la operación).

${var,,}siendo bashel operador 'para convertir a minúsculas. date -dsiendo la forma GNU datede analizar una fecha (como strftime -rarriba).

Si bien zmvcomprobaría si hay conflictos antes de comenzar a cambiar el nombre de cualquier archivo, este no lo haría. Por lo tanto, agregamos lo -ianterior para al menos brindarle la oportunidad de evitar archivos dañinos. GNU mvtiene una -vopción para decirle que muestre lo que va a hacer, lo que puede ser útil para revertir el comando más adelante si algo salió mal.

información relacionada