Extrai uma substring particular do nome do arquivo

1

A tarefa que preciso resolver é extrair uma substring particular de cada nome de arquivo em um diretório.

Nomes de arquivos de exemplo:

Bob Marley - eu atirei no xerife- 2XiYUYcpsT4 .mp3
Audioslave - Seja você mesmo - WC5FdFlUcl0 .mp3
Bruno Mars - Tesouro [Official Music Video] - nPvuNsRccVw .mp3

Basicamente, é uma coleção de músicas que eu peguei no youtube e eu preciso extrair o id do vídeo (a parte em negrito). Como posso resolver esse problema no bash? A divisão baseada no delimitador não é confiável, pois o id do vídeo às vezes contém um hífen em si.

    
por Warrior 18.01.2016 / 17:44

2 respostas

3

Você pode usar a expansão de substring :

for file in ./*.mp3
do
videoid=${file:${#file}-15:11}
printf %s\n $videoid
done

ou, se houver mais de uma extensão, use

noext=${file%.*}
videoid=${noext:${#noext}-11:11}

Isso pressupõe que os IDs de vídeo do YouTube são sempre 11 caracteres .

    
por 13.04.2017 / 14:57
1

Se houver sempre um traço antes do id e não houver nenhum traço após o id, você poderá usar a expansão de parâmetro simples. % remove o padrão do final do valor, # desde o início. Dobrar o símbolo torna-o "ganancioso" - remove o máximo possível.

#! /bin/bash

files=( 'Bob Marley - I Shot The Sheriff-2XiYUYcpsT4.mp3'
        'Audioslave - Be Yourself-WC5FdFlUcl0.mp3'
        'Bruno Mars - Treasure [Official Music Video]-nPvuNsRccVw.mp3'
      )

for file in "${files[@]}" ; do
    id=${file##*-}
    id=${id%.mp3}
    echo "$id"
done
    
por 18.01.2016 / 18:13

Tags