Bash 루프에서 프로세스 명령의 출력을 사용하는 방법은 무엇입니까?

Bash 루프에서 프로세스 명령의 출력을 사용하는 방법은 무엇입니까?

디렉터리에 있는 여러 미디어 파일의 형식 정보를 얻으려고 합니다. 내 스크립트는 각 파일을 살펴보고 해당 형식(미디어 파일인 경우)을 언급한 다음 종료됩니다.

내가 정말로 원하는 것은 출력이 특정 값과 일치하면 특정 명령을 실행하는 것입니다. 이것은 내 코드입니다.

for file in ./*
do
    ffprobe -v error -select_streams a:0 -show_entries stream=codec_name -of default=nokey=1:noprint_wrappers=1 "$file" 
done

다음은 10개의 파일과 1개의 디렉터리가 포함된 폴더에서 실행할 때 얻는 샘플 출력입니다.

vorbis
aac
opus
vorbis
mp3
opus
mp3
./file1.txt: Invalid data found when processing input
./Soundcloud: Is a directory
mp3
./media_bash_file.sh: Invalid data found when processing input

이상적으로 내가 하고 싶은 일은 ffprobe 명령이 실행되면 가고 싶은 것입니다.

if ffprobe_output = "vorbis" then run x command ELSE ...

등. 사용에 관해 언급된 다양한 블로그 게시물을 시도해 보았습니다.

var=$(insert_ffprobe_command_here) 

배치 파일의 시작 부분에 있지만 제대로 작동하지 않는 것 같습니다. 일반적으로 다음과 같은 오류가 발생합니다.

"Argument './Mediafile_X' provided as input filename, but './Mediafile_Y' was already specified.

내가 작성한 첫 번째 코드 조각만 얻었습니다.

답변1

for file in ./*
do
    output=$(ffprobe -v error -select_streams a:0 -show_entries stream=codec_name -of default=nokey=1:noprint_wrappers=1 "$file")
    if [ "$output" = "vorbis" ];then ......
    else ....
    fi
done

관련 정보