grep e corte em um arquivo cue + mkdir cria um nome de diretório com um ponto de interrogação

0

Eu faço isso:

var='grep GENRE Billy_Cobham_-_Drum_\&_Voice_2.cue | cut -d ' ' -f 3'
mkdir $var

A linha interessada file.cue é:

REM GENRE Funky+Jazz

Quando mkdir cria o diretório, o diretório mostrado com ls é:

Funky+Jazz?

Eu fiz muitos testes para entender com muitos comandos como awk grep cut sed em todos os testes lendo o terminal os resultados são "Funky + Jazz". Mas a string tem uma "nova linha inicial" oculta. E, gerou o resultado estranho quando o comando mkdir é invocado.

Se eu abrir o terminal no diretório Funky + Jazz, o shell aparecerá como:

 $ @host:~/Desktop/test/5/Funky+Jazz

Eu não sei como resolver este problema e tenho um nome de diretório correto sem ponto de interrogação. Esta é a minha sugestão

REM GENRE Funky+Jazz
REM DATE 2006
REM DISCID 920BFB0A
REM COMMENT "ExactAudioCopy v0.95b4"
PERFORMER "Billy Cobham"
TITLE "Drum & Voice 2"
FILE "Billy_Cobham_-_Drum_&_Voice_2.ape" WAVE
  TRACK 01 AUDIO
    TITLE "Waveform"
    PERFORMER "Billy Cobham"
    INDEX 01 00:00:00
  TRACK 02 AUDIO
    TITLE "Real Funk"
    PERFORMER "Billy Cobham"
    INDEX 00 05:04:19
    INDEX 01 05:06:21
  TRACK 03 AUDIO
    TITLE "Running"
    PERFORMER "Billy Cobham"
    INDEX 00 09:42:52
    INDEX 01 09:44:56
  TRACK 04 AUDIO
    TITLE "Final Destination"
    PERFORMER "Billy Cobham"
    INDEX 00 17:30:36
    INDEX 01 17:32:38
  TRACK 05 AUDIO
    TITLE "One More Day To Live"
    PERFORMER "Billy Cobham"
    INDEX 00 24:26:37
    INDEX 01 24:28:38
  TRACK 06 AUDIO
    TITLE "Ozone Part 1"
    PERFORMER "Billy Cobham"
    INDEX 00 29:41:47
    INDEX 01 29:43:39
  TRACK 07 AUDIO
   TITLE "Ozone Part 2"
    PERFORMER "Billy Cobham"
    INDEX 00 31:56:06
    INDEX 01 31:56:16
  TRACK 08 AUDIO
TITLE "Take Seven"
    PERFORMER "Billy Cobham"
    INDEX 00 38:24:64
INDEX 01 38:26:68
  TRACK 09 AUDIO
    TITLE "Let Me Breathe"
PERFORMER "Billy Cobham"
    INDEX 00 44:28:41
    INDEX 01 44:30:41
  TRACK 10 AUDIO
    TITLE "Amazon"
    PERFORMER "Billy Cobham"
    INDEX 00 48:54:16
    INDEX 01 48:56:20
    
por johnny cravatta 19.07.2012 / 04:45

1 resposta

1

Uma solução é a seguinte:

#!/bin/bash

while read line; do
   if [ "${line:0:10}" = "REM GENRE " ]; then
      folder=$(echo "${line:10}" | tr -d '\n\r')
      mkdir $folder
      break
   fi
done < file.cue
echo "Folder $folder has been created"

Testado com o arquivo de amostra que você anexou como comentário para esta resposta.

Explicação: No início, há um loop while, que, como você pode ver a partir de < file.cue, lê o file.cue e lê, uma por uma, as linhas do arquivo. A declaração if agora, a linha

if [ "${line:0:10}" = "REM GENRE " ]; then

significa: Se as 10 primeiras letras da variável 'linha' forem iguais a "REM GENRE", então ...

Quando a afirmação if é verdadeira, estamos na linha em que estamos interessados. No entanto, o que nos interessa nessa linha são os caracteres após a décima carta de $ line. A $ {line: 10}, significa tudo após as 10 primeiras letras da variável 'linha'.

Então, faço eco de tudo depois dos 10 primeiros caracteres e, com a ajuda de 'tr', eu cortei qualquer caractere de nova linha (que foi o que causou o problema, na verdade). Eu adiciono isso à variável 'pasta' e eu a crio.

    
por hytromo 22.07.2012 / 16:47