ID3tag - 파일 이름에서 메타데이터를 추출하는 스크립트

ID3tag - 파일 이름에서 메타데이터를 추출하는 스크립트

다음과 같은 녹음 디렉토리가 있습니다.

foo - bar-202009.opus
unix - tilde-2020se.opus
stack - exchange-29328f.opus

파일 이름에서 메타 설정을 시도했습니다 foo - bar.202009.opus (일부 불일치가 있어서 쉬운 방법은 폐기되었습니다 -<6digitchars>.opus).

song title = foo - bar 

스크랩에는 sed를 사용하세요.

$ ls | sed 's/-[a-zA-Z0-9]*\w//g; s/.opus//g'

foo - bar
unix - tilde
stack - exchange

나는 그것을 설정하기 위해 id3tag를 사용합니다, synatx

id3tag --song=[tilte] [file]

나는 이 모든 것을 디렉토리에 가지고 있으므로 while & read로 반복합니다.

ls | while read x; \
    do id3tag \
    $(echo \
    --song=\"$(echo $x | sed 's/-[a-zA-Z0-9]*\w//g; s/.opus//g')\"  \
    \"${x}\"
    ); \
    done

위의 문제는 입력 파일의 공백으로 인해 id3이 다른 파일로 해석된다는 것입니다(대괄호 사용 시에도 \"${x}\").

이제 출력은 다음과 같습니다.

foo
'bar"'
'"bar-202009.opus"'
.
.

i3dtag가 공백이 있는 파일을 단일 파일로 처리하도록 하는 방법이 있습니까?

답변1

ls한 줄로 구문 분석을 피하십시오 .

#!/bin/sh

for file in *; do
    scrap="$(echo $file | sed 's/-[a-zA-Z0-9]*\w//g; s/.opus//g')"
    id3tag --song="${scrap}" "${f}"
done

답변2

나는 그것을 한 줄로 만들려고하지 않는 것이 좋습니다.

ls | while read x; do
    x="$(echo $x | sed 's/-[a-zA-Z0-9]*\w//g; s/.opus//g')"
    id3tag --song="${x}"
done

annahri가 출력을 구문 분석하지 않는다는 점은 ls좋은 것이므로 다음과 같이 할 수 있습니다.

for x in *.opus; do
 .... the rest is the same

이런 식으로 서브쉘은 따옴표를 사용하거나 따옴표를 리터럴로 전달할 수 있는 장소가 더 적습니다 id3tag.

관련 정보