2014-04-15 2 views
2

저는 프로그래밍에 약간 익숙하며, bash 스크립트에서이 작업을 수행하는 방법을 모르겠습니다.파일 이름에서 2 개의 숫자를 가져 와서 명령에 넣습니다.

빠른 배경 : 이전에 iTunes에서 구성한 음악 라이브러리를 Banshee로 가져올 때 모든 파일이 Banshee의 번호 스타일 (예 : 02 대신 02)에 맞게 복제되었으므로 iTunes가 분명히 했음 ID3 태그를 파일에 저장하지 않으므로 많은 파일이 비어 있습니다. 이제는 파일을 수정하고 중복 제거하기 위해 수천 개의 태그가 있습니다.

프로세스를 자동화하기 위해 필자는 bash 스크립트를 작성하는 법을 배우기 시작했습니다. 필자는 4 가지를 수행하는 스크립트 (you can see here)를 생각해 냈습니다. 불필요한 iTunes 파일을 제거하고, ID3 태그 정보에 대한 사용자 입력을 가져 와서 변수에 저장하고, 모든 파일에서 현재 태그 정보를 지우고, 가져온 정보로 새 태그를 작성합니다 사용자에게 eyeD3이라는 프로그램을 사용합니다.

이제 내 문제가 발생합니다. 이 스크립트는 기본적으로 맹목적으로 dir의 모든 mp3 파일에 정보를 쓰고 있습니다. 아티스트, 앨범, 총 트랙, 연도 등과 같이 모든 파일에 공통적으로있는 태그는 괜찮습니다. 그러나이 방법으로 개별 트랙 번호를 태그 할 수는 없습니다. 따라서 트랙 # 태그를 수동으로 한 번에 하나씩 편집하고 있습니다. 그리고 그건 내가 정말로 2,000 번 이상하고 싶지 않은 것입니다.

파일 이름은 모두가 같이 :

01. song1.mp3 
02. song2.mp3 
03. song3.mp3 

명령은 태그에 트랙 번호를 쓸 수는 다음과 같습니다 : 그래서

$ eyeD3 -n 1 "01. song1.mpg" 

... 나는 방법을 잘 모르겠어요 이 작업을 자동화하려고합니다. 각 파일 이름의 처음 두 자리 숫자를 잡고 어딘가에 저장 한 다음 각각을 별도의 eyeD3 명령으로 호출해야합니다.

+2

는 아마도 약간 다른 방법이있다. 방금 점검 했어요, 반시는 뮤직 브레인즈 플러그인을 가지고 있습니다. 이 플러그인을 사용하면 ID3 태그를 자동 채우기를 시도 할 수 있습니다. – user3159253

+0

파일 이름이 노래의 제목 인 전체 태그 정보를 전달하지 않기 때문에 이것은 각 파일 이름을 구문 분석하는 것보다 작업을 수행하는 데 더 생산적인 방법 일 수 있습니다. – user3159253

답변

1

할 수 있습니다 globbing을 사용하여 파일을 통해 루프 및 파일 이름의 처음 두 문자를 캡처 확장을 하위 문자열을 사용하십시오

for f in *mp3; do 
    eyeD3 -n ${f:0:2} "$f" 
done 
+0

완벽하게 작동합니다. 감사합니다. – PatMcTookis

관련 문제