grep и cut в cue file + mkdir создает имя каталога с вопросительным знаком
Я сделаю это:
var=`grep GENRE Billy_Cobham_-_Drum_\&_Voice_2.cue | cut -d ' ' -f 3`
mkdir $var
Интересующая строка file.cue:
REM GENRE Funky+Jazz
когда mkdir создает каталог, каталог показывается с ls является:
Funky+Jazz?
Я сделал много тестов, чтобы понять с помощью многих команд, таких как awkgrepcutsed во всех тестах, читающих терминал, результаты "Funky+Jazz". Но в строке есть скрытая "Стартовая строка". И это привело к странному результату, когда mkdir Команда вызывается.
Если я открою терминал в каталоге Funky + Jazz, оболочка будет выглядеть так:
$ @host:~/Desktop/test/5/Funky+Jazz
Я не знаю, как решить эту проблему и иметь правильное имя каталога без знака вопроса. Это моя реплика
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
1 ответ
Решение заключается в следующем:
#!/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"
Протестировано с файлом примера, который вы добавили в качестве комментария к этому ответу.
Объяснение: В начале есть цикл while, который, как вы можете видеть из готового файла означает: если первые 10 букв переменной 'line' равны "REM GENRE ", то... Когда выражение if истинно, мы находимся на интересующей нас строке. Однако нас интересует эта строка, это символы после 10-й буквы строки $. ${Line:10} означает все после первых 10 букв переменной 'line'. Итак, я "повторяю" все после первых 10 символов, и с помощью "tr" я обрезаю любой символ новой строки (что и стало причиной проблемы в действительности). Я добавляю это в переменную 'folder' и создаю это.if [ "${line:0:10}" = "REM GENRE " ]; then