제 생각에는
"yt 버전"을 검색하세요.
"mqversion"으로 바꾸세요.
제목 태그에
여러 mp3 파일. 이 프로세스에서 메타데이터 콘텐츠의 다른 부분을 편집/삭제하지 않기를 원합니다.
가능합니까? 그렇다면 어떤 도구를 사용해야 합니까?
여러 mp3 파일의 메타데이터에서 특정 문자열을 검색할 수 있다는 것을 알고 있습니다. EasyTag에서는 가능합니다.
하지만 해당 특정 문자열을 사전 정의된 메타데이터 필드(위 예의 제목 필드)의 다른 문자열로 바꾸려면 어떻게 해야 합니까?
EasyTag를 사용할 필요는 없습니다. 그냥 어느 시점에 설치한 것일 뿐입니다.
제 질문에 대한 대답은 제가 확실히 사용할 수 있는 정규 표현식에 달려 있다고 생각합니다. 단지 나는 그것들을 사용하거나 실제로 구현하는 어떤 프로그램(CLI에서든 GUI에서든)을 모른다는 것입니다.
답변1
id3v2
운영 체제의 저장소에 있어야 하는 이 도구를 사용하여 이 작업을 수행 할 수 있습니다 (이 솔루션에서는 GNU 를 가정 grep
하며 Linux를 실행하는 경우 기본값은 GNU입니다).
## Iterate over all file/dir names ending in mp3
for file in /path/to/dir/with/mp3/files/*mp3; do
## read the title and save in the variable $title
title=$(id3v2 -l "$file" | grep -oP '^(Title\s*|TIT2\s*.*\)):\K(.*?)(?=Artist:)');
## check if this title matches ytversion
if [[ "$title" =~ "ytversion" ]]; then
## If it does, replace ytversion with mqversion and
## save in the new variable $newTitle
newTitle=$(sed 's/ytversion/mqversion/g' <<<"$title")
## Set the tite tag for this file to the value in $newTitle
id3v2 -t "$newTitle" "$file"
fi
done
id3v2
이 도구는 제목과 아티스트를 같은 줄에 인쇄하기 때문에 약간 복잡합니다 .
$ id3v2 -l foo.mp3
id3v1 tag info for foo.mp3:
Title : : title with mqversion string Artist:
Album : Year: , Genre: Unknown (255)
Comment: Track: 0
id3v2 tag info for foo.mp3:
TENC (Encoded by): iTunes v7.0
TIT2 (Title/songname/content description): : title with mqversion string
이 -o
플래그는 grep
행의 일치하는 부분만 인쇄하고 -P
PCRE 정규식을 활성화하도록 지시합니다. 정규 표현식은 로 시작하고 Title
그 뒤에 0개 이상의 공백 문자가 온 다음 :
( ^Title\s*:
) 이 오는 줄을 검색하거나, 로 시작하고 TIT2
그 뒤에 ):
( ^TIT2\s*.*\)
) 가 오는 줄을 검색합니다. 그러면 해당 시점까지 일치하는 모든 항목이 삭제됩니다 \K
. 그런 다음 가장 짧은 문자열( .*?
) 뒤에 Artist:
.( 가 오는 것을 검색합니다. (?=Artist:)
이를 호출합니다.긍정적 인 전망찾고 있는 문자열과 일치하지만 일치 항목에 포함되지 않으므로 grep
)는 인쇄하지 않습니다.