다음과 같은 녹음 디렉토리가 있습니다.
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
.