Script para dividir a string

1

@ terdon's answer fornece este script:

find . -type f -name "*mp3" | while read file; do 
    album="$(basename "$(dirname "$file")")"; 
    filename="$(basename "$file")"; 
    artist=${filename%%-*}; 
    title=${filename##*-}; 
    title=${title%%.mp3}; 
    eyeD3 -A "$album" -t "$title" -a "$artist" "$file"; 
done

Faz uso de eyeD3 para atualizar tags de mp3. Ele extrai Álbum, Artista e Título do nome do arquivo, supondo que o nome do arquivo seja Album/Artist - Title.mp3 .

Bem, depois de executá-lo, o campo Título começa com um espaço em branco. Veja abaixo:

Como consertar isso se meus arquivos mp3 tiverem o padrão

Album/<Artist with possible spaces> - <track number> - <Title with possible spaces>.mp3
    
por Sigur 09.02.2014 / 19:29

3 respostas

1

Como suponho que seus nomes não têm sempre esses espaços, a melhor coisa a fazer seria simplesmente remover o espaço, se presente:

find . -type f -name "*mp3" | 
  while read file; do 
   album="$(basename "$(dirname "$file")")"; 
   filename="$(basename "$file")"; 
   artist=${filename%%-*}; artist=${artist%% }; artist=${artist## };
   title=${filename##*-}; title=${title%% }; title=${title## };
   title=${title%%.mp3}; 
   eyeD3 -A "$album" -t "$title" -a "$artist" "$file";
 done
    
por 09.02.2014 / 20:48
1

Os padrões de globos estendidos do Ksh fornecem curingas o poder das expressões regulares. No bash, ligue-os com shopt -s extglob .

Então, em vez de

title=${filename##*-}

para remover a parte de $filename até o último - , você pode usar

title=${filename##*- #}

para remover os espaços em branco após o - .

    
por 10.02.2014 / 02:35
0

Se você quiser apenas remover o espaço principal do artista, use o sed. Algo como isso deve funcionar.

artist=${filename%%-*}; 
artist='echo $artist |  sed 's/^ *//g'';
    
por 09.02.2014 / 20:59