ls -l은 디렉토리에 있는 파일 이름을 연결하는 것 같습니다.

ls -l은 디렉토리에 있는 파일 이름을 연결하는 것 같습니다.

디렉터리의 모든 .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(위에서 설명한 대로 자체적으로 쉘 문자열 처리로 대체될 수 있음).

관련 정보