mp3 파일의 id3 태그에 트랙과 제목 정보를 자동으로 추가하는 스크립트를 작성하려고 합니다.
이 시점에서 파일 이름에서 정보를 삭제하고 id3v2 명령에 맞게 형식을 지정했지만 여러 단어로 된 제목을 클릭하면 오류가 발생합니다 Couldn't stat file '<second word of title>'
. 실행 중인 id3v2 명령을 에코하면 다음 형식의 명령이 표시됩니다.
id3v2 -t Title\ Of\ Track -T 1 1_-_Title_Of_Track.mp3
해당 텍스트를 터미널에 복사/붙여넣으면 마크업이 올바르게 수행되지만 예상되는 스크립트 자동화가 부족합니다. 따라서 프로세스를 자동화하도록 설계된 스크립트는 다음과 같습니다.
#!/bin/bash
for track in *.mp3 ; do
id3v2 $(echo ${track} | sed -e 's/^\([1-9][0-9]*\)_-_\(.*\).mp3/-t \2 -T \1/' -e 's/_/\\ /g') ${track}
done
제목을 수동으로 입력하면 단일 매개변수로 처리되지만 스크립트로 입력하면 제목이 처리되지 않는 이유에 대해 알고 계시나요?
답변1
sed
Valentin B와 mueh의 의견에 따라 스크립트의 구문 분석을 포기 하고 대신 bash의 문자열 조작을 사용했습니다. 여러 데이터를 구문 분석하고 단일 명령으로 정렬하는 것이 좋지만 sed
, 결과를 사용한 명령 확장은 공백 앞에 백슬래시가 있거나 따옴표로 묶인 경우에도 출력을 공백으로 구분된 "단어"로 분할합니다.
id3v2
따라서 한 번에 모든 매개변수를 구성하는 대신 sed
bash의 문자열 조작을 사용하여 트랙 번호와 제목을 개별적으로 구문 분석합니다. 최종 결과:
for track in *.mp3 ; do
track_num=${track%_-_*}
title=${track#*_} ; title=${title%.mp3} ; title=${title//_/ }
id3v2 -t "${title}" -T ${track_num} ${track}
done
질문에 대한 내 접근 방식이 작동하지 않는 이유를 정확히 설명해준 mueh와 bash의 문자열 조작을 소개한 Valentin B에게 감사드립니다.