Gostaria de ajuda com um script de shell para macOS para renomear arquivos com um determinado padrão. O script lidaria com apenas um arquivo, não com vários.
Aqui estão três exemplos:
a. Palestras Públicas_ (189) Andar com Deus traz bênçãos agora e para sempre - Chris Ruscher 10_28_2023.mp3
se tornaria
189 - Andar com Deus traz bênçãos agora e para sempre - Chris Ruscher - 2023-10-28-0900.mp3
b. Discursos Públicos_ (55) Como você pode fazer um bom nome diante de Deus? -Gregory Duhon 11_4_2023.mp3
se tornaria
055 - Como você pode fazer um bom nome diante de Deus? - Gregory Duhon - 2023-11-04-0900.mp3
c. Palestras Públicas_ (9) Andar com Deus traz bênçãos agora e para sempre - Chris Ruscher 10_28_2023.mp3
se tornaria
009 - Caminhar com Deus traz bênçãos agora e para sempre - Chris Ruscher - 2023-10-28-0900.mp3
Então, em essência, o formato e a ordem finais devem ser: track number
, title
, speaker name
, e timestamp
.
- elimine o prefixo “Conversas Públicas_“
- Isole o número da faixa como um número de 3 dígitos com zeros à esquerda, conforme necessário
- Traços entre todos os 4 elementos
- Reformate a data para um carimbo de data/hora como aaaa-mm-dd-0900
Eu pegaria o script Shell e o usaria por arquivo nesta caixa de diálogo (sem necessidade de iterar):
Observe que a variável do arquivo que está sendo passado para o script de shell precisa ser escrita como "$1", conforme visto na caixa de diálogo abaixo.
Alguém me ajudou a criar um, mas ele só funciona no Windows e não leva em consideração "$1" como arquivo e está configurado para executar vários arquivos. Preciso que funcione no macOS para um arquivo por vez.
#!/bin/bash
for file in *.mp3; do
# Remove "Public Talks_"
newname=${file#"Public Talks_ "}
# Extract the track number and pad with leading zeros
track=$(echo $newname | grep -o -E '\([0-9]+\)' | tr -d '()' | awk '{printf "%03d\n", $0}')
# Remove track number and trailing spaces
newname=$(echo $newname | sed -E 's/\([0-9]+\)//' | sed 's/^ *//')
# Extract the title and speaker
title=$(echo $newname | awk -F '—' '{print $1}' | sed 's/ *$//')
speaker=$(echo $newname | awk -F '—' '{print $2}' | awk '{print $1, $2}')
# Extract the date and reformat
date=$(echo $newname | grep -o -E '[0-9]+_[0-9]+_[0-9]+' | tr '_' '-' | awk -F- '{print $3"-"$1"-"$2"-0900"}')
# Concatenate all elements with dashes
newname="$track - $title - $speaker - $date.mp3"
# Rename the file
mv "$file" "$newname"
done
Alguém pode traduzi-lo para a sintaxe adequada do macOS ou escrever um script de shell ainda mais conciso?