Захватите текст имени файла между - и .mp3 и переведите его в текстовый файл

У меня есть каталог, полный файлов .mp3 с именами файлов, в которых есть ссылка на YouTube.

В частности, все части URL-адресов для просмотра YouTube начинаются с - и заканчиваются .mp3.

Однако есть проблема.

В некоторых ссылках на YouTube есть символы, а также в некоторых заголовках.

Мне нужно извлечь из заголовка только эту часть видео:

https://www.youtube.com/watch?v= (dQw4w9WgXcQ)

Название видео, загруженного с помощью youtube-dl:

Рик Эстли - Never Gonna Give You Up-dQw4w9WgXcQ.mp3

Название видео:

Рик Эстли - Никогда не откажусь от тебя

Я пытался получить все ссылки, которые я уже загрузил, и поместить их в текстовый файл, который сообщает youtube-dl не загружать их повторно (скачать архив)

Как бы я это сделал? (желательно с помощью команды bash sed, но на данный момент я готов попробовать что угодно.)


person Noble    schedule 21.05.2016    source источник
comment
Идентификатор Youtube всегда одинаковой длины. Так что просто возьмите последние 15 символов имени файла и опустите .mp3 с конца. Или что-то вроде того, что кажется проще.   -  person rici    schedule 21.05.2016
comment
ОХХХ ЭТО? в этом есть смысл.   -  person Noble    schedule 21.05.2016
comment
Теперь все, что мне нужно сделать, это запрограммировать сценарий, который берет предыдущие определенные символы из .mp3 и передает их в текстовый файл.   -  person Noble    schedule 21.05.2016


Ответы (1)


это проще, чем вы думаете: жадный .*, за которым следует -, съест все -s до последнего:

# first get the titles an ids into a tab-separated multiline string
both=`find * -name "*.mp3" | sed 's/\(.*\)-\(.*\)\.mp3/\1\t\2/'`

# then cut it into two multiline strings
titles=`echo "$both" | cut -f1`
ids=`echo "$both" | cut -f2`

# or process each title-id pair one-by-one
echo "$both" | while IFS=$'\t' read title id; do
  echo "$title"
  echo "$id"
done
person webb    schedule 21.05.2016
comment
я ... я не понимаю, что ты имеешь в виду, говоря "съесть все ..."): - person Noble; 21.05.2016
comment
ОЙ! Я понял ... Спасибо! - person Noble; 21.05.2016