대규모 음악 컬렉션에서 M4A를 OGG로 대규모 변환을 시도하면서 다음과 같은 결과를 얻었습니다.
#!/bin/sh
for i in `find /home/family/Music -name *.m4a -print0`
#do ffmpeg -i "$i" -acodec libvorbis -aq 6 -vn -ac 2 "$i.ogg";
do echo $i
done
모든 파일의 이름에는 공백이 있으며 위 출력에는 다음과 같은 파일이 표시됩니다.
/home/family/Music/The
Kooks/Inside
In
_
Inside
Out/06
You
Don't
Love
Me.m4a
각 공간은 새로운 선을 표시합니다. 그러면 -print0
문제가 해결될 수 있을까요?
답변1
while
다음 명령문과 함께 루프를 사용하십시오 read -d '' -r
.
find /home/family/Music -name '*.m4a' -print0 | while read -d '' -r file; do
echo "$file"
done
답변2
다음과 같이 외부 루프를 "내부" 루프로 이동하여 단어 분리 문제를 피할 수 있습니다.
find /home/family/Music -name '*.m4a' -exec \
sh -c 'for i; do ffmpeg -i "$i" -acodec libvorbis -aq 6 -vn -ac 2 "$i.ogg"; done' sh {} +
또한 셸에 의한 예기치 않은 전역 확장을 방지하려면 -print0
더 이상 필요하지 않습니다 .*.m4a