ファイル名から特定の部分文字列を抽出する

ファイル名から特定の部分文字列を抽出する

私が解決する必要があるのは、ディレクトリ内の各ファイル名から特定の部分文字列を抽出することです。

ファイル名の例:

ボブ・マリ -保安官を撃った -2XiYUYcpsT4.mp3
Audioslave -あなた自身になる -WC5FdFLUcl0.mp3
ブルーノマス - Treasure [公式ミュージックビデオ]-nPvuNsRccVw.mp3

基本的にYouTubeから取得した音楽のコレクションですが、ビデオID(太字)を抽出する必要があります。 Bashでこの問題をどのように解決できますか?区切り文字ベースのセグメンテーションは、動画 ID にハイフンが含まれる場合があるため、信頼できません。

ベストアンサー1

使用できる部分文字列拡張:

for file in ./*.mp3
do
videoid=${file:${#file}-15:11}
printf %s\\n $videoid
done

または、複数の拡張子がある場合は、次を使用します。

noext=${file%.*}
videoid=${noext:${#noext}-11:11}

これは次のように仮定します。YouTube動画IDは常に11文字です。

おすすめ記事