파일 이름에서 특정 부분 문자열 추출

파일 이름에서 특정 부분 문자열 추출

내가 해결해야 할 작업은 디렉터리의 각 파일 이름에서 특정 하위 문자열을 추출하는 것입니다.

파일 이름 예:

밥 말리 - 보안관을 쐈어요 -2XiYUYcpsT4.mp3
Audioslave - 너 자신이 되어라 -WC5FdFLUcl0.mp3
브루노 마스 - Treasure [공식 뮤직비디오]-nPvuNsRccVw.mp3

기본적으로 유튜브에서 가져온 음악 컬렉션인데 동영상 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자입니다..

답변2

ID 앞에 항상 대시가 있고 ID 뒤에 대시가 없는 경우 간단한 매개변수 확장을 사용할 수 있습니다. 값의 끝과 시작 부분에서 %패턴을 제거합니다 . #기호를 두 배로 늘리면 "탐욕적"이 됩니다. 즉, 가능한 한 많은 콘텐츠가 제거됩니다.

#! /bin/bash

files=( 'Bob Marley - I Shot The Sheriff-2XiYUYcpsT4.mp3'
        'Audioslave - Be Yourself-WC5FdFlUcl0.mp3'
        'Bruno Mars - Treasure [Official Music Video]-nPvuNsRccVw.mp3'
      )

for file in "${files[@]}" ; do
    id=${file##*-}
    id=${id%.mp3}
    echo "$id"
done

관련 정보