
디렉터리의 모든 .ogg 파일을 .mp3 파일로 변환하는 쉘스크립트를 작성하고 싶습니다. 파일 이름에 공백이 포함되어 있어 명령 시퀀스에서 큰따옴표를 많이 사용하고 있습니다. 내가 사용하는 명령은
for FILE in "`ls -1 *.ogg`" ; do
ROOTFILE=`printf "%s\n" "$FILE" | sed "s/ogg//" `
ffmpeg -i "$FILE" "$ROOTFILE"mp3
done
그러나 디렉토리의 모든 파일 이름은 이제 ffmpeg에 의해 문자열로 처리됩니다. 파일 이름 안의 공백을 유지하면서 개별 파일 이름을 어떻게 구분할 수 있나요?
답변1
모든 의견을 요약합니다(작성자:에릭 레노프,강철 드라이버, 그리고카스) 문제에 대한 해결책은 다음과 같습니다.
for f in *.ogg; do
ffmpeg -i "$f" "${f%.ogg}.mp3"
done
이렇게 하면 시도 시 몇 가지 문제를 피할 수 있습니다.
- 구문 분석된
ls
출력; - 재발명
basename
(위에서 설명한 대로 자체적으로 쉘 문자열 처리로 대체될 수 있음).