2016-05-21 1 views
0

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

Все части URL-страниц с часами youtube, в частности, начинаются с - и заканчиваются на .mp3.

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

Некоторые ссылки на youtube имеют -'s в них, а некоторые из названий - тоже в них.

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

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

Название видео скачанного с YouTube-нисходящая:

Рик Эстли - Никогда Собираюсь Give You Up-dQw4w9WgXcQ.mp3

название видео является:

Рик Эстли - Never Gonna Дайте You Up

То, что я пытаюсь выполнить, чтобы получить все ссылки, которые я уже загружены и поместить его в текстовый файл, который говорит YouTube-DL, чтобы повторно не загружать их (скачать архив)

Как мне это сделать? (Желательно с командой Баш СЭД, но в данный момент я готов попробовать что-нибудь.)

+1

Идентификатор Youtube всегда такой же длины. Так что просто возьмите последние 15 символов имени файла, а затем отпустите '.mp3' с конца. Или любой эквивалент кажется более простым. – rici

+0

OHHH ЭТО? это имеет смысл. – babadoctor

+0

Теперь все, что мне нужно сделать, это программа сценария, который берет предыдущие определенные символы из .mp3 и pipe в текстовый файл – babadoctor

ответ

1

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

# 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 
+0

i-- я не понимаю, что вы имеете в виду, употребляя все -'s ..): – babadoctor

+1

OH ! Я понимаю ... Спасибо! – babadoctor

Смежные вопросы