2016-05-21 6 views
0

Ich habe ein Verzeichnis voller MP3-Dateien mit Dateinamen, die einen Youtube-Link enthalten.Grab Dateiname Text zwischen - und. Mp3 und Pipe in Textdatei

Alle Youtube Watch URL Teile beginnen mit einem - und enden mit einem .mp3.

Es gibt jedoch ein Problem.

Einige Youtube-Links haben -'s in ihnen, und einige der Titel haben -'s in ihnen.

Ich brauche nur diesen Teil des Videos aus dem Titel zu extrahieren:

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

Der Titel des Videos mit youtube-dl heruntergeladen ist:

Rick Astley - Never Gonna Give You Up-dQw4w9WgXcQ.mp3

der Titel des Videos ist:

Rick Astley - Never Gonna Geben Sie Up

Was ich versuche zu erreichen, alle Links zu erhalten, die ich hatte bereits heruntergeladen und steckte es in eine Textdatei, die nicht erneut herunterladen sie youtube-dl erzählt (Download-Archiv)

Wie würde ich das machen? (Vorzugsweise mit einem bash sed Befehl, aber an diesem Punkt bin ich bereit, alles zu versuchen.)

+1

Die Youtube-ID ist immer gleich lang. Nimm einfach die letzten 15 Zeichen des Dateinamens und lege dann die '.mp3' vom Ende ab. Oder was gleichwertiges scheint einfacher. – rici

+0

OHHH IST ES? das macht viel Sinn. – babadoctor

+0

Jetzt muss ich nur ein Skript programmieren, das die vorherigen bestimmten Zeichen von .mp3 und Rohr zu Textdatei – babadoctor

Antwort

1

es ist einfacher als Sie denken: die gierigen .* gefolgt von - essen alle - s bis zuletzt:

# 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-- ich verstehe nicht, was Sie mit essen alle -'s .. bedeuten): – babadoctor

+1

OH ! Ich verstehe es ... Danke! – babadoctor

Verwandte Themen