내가 해결해야 할 작업은 디렉터리의 각 파일 이름에서 특정 하위 문자열을 추출하는 것입니다.
파일 이름 예:
밥 말리 - 보안관을 쐈어요 -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