Como eu uso a saída de um comando para um processo dentro de um loop no Bash?

3

Eu estou tentando obter as informações de formato de um monte de arquivos de mídia em um diretório. O script que eu tenho passa por cada arquivo, menciona em qual formato está (se é um arquivo de mídia) e então sai.

O que eu realmente queria fazer era executar um comando específico se a saída correspondesse a um determinado valor. aqui está o código que tenho:

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

Aqui está um exemplo de saída que recebo quando eu o executo em uma pasta com 10 arquivos e um diretório:

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

Idealmente, o que estou tentando fazer é que, assim que o comando ffprobe for executado, eu queira ir

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

e assim por diante. Eu tentei o que é mencionado em vários posts sobre o uso de

var=$(insert_ffprobe_command_here) 

no início do arquivo de lote, mas parece que não consigo funcionar corretamente, geralmente resulta em um erro como:

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

Eu só cheguei ao primeiro trecho de código que eu fiz.

    
por Weej Jamal 01.02.2017 / 01:54

1 resposta

0

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
    
por 01.02.2017 / 02:00