usando a variável “file” obtida de 'for “file” in' e passar para outro script falha [closed]

3

Estou tentando pesquisar todos os arquivos .mkv na minha pasta atual e, em seguida, usando mediainfo , quero colocar o height de seus metadados em uma variável, mas parece que está falhando.

Este snippet:

height=$(mediainfo "input.mkv" | grep -E 'Height'); echo $height; height=${height//[!0-9]/}; echo $height;

está funcionando muito bem, ele gera o resultado que eu quero se eu inserir manualmente o nome do arquivo:

# height=$(mediainfo 'input.mkv' | grep -E 'Height'); echo $height; height=${height//[!0-9]/}; echo $height;
Height : 720 pixels
720

Mas, quando tento colocá-lo no meu for file in , para não precisar inserir manualmente o nome do arquivo, ele continua falhando:

for file in *.{mkv}; do height=$(mediainfo "$file" | grep -E 'Height'); echo $height; height=${height//[!0-9]/}; echo $height; done 

A saída da variável $height está vazia.

# for file in *.{mkv}; do height=$(mediainfo "$file" | grep -E 'Height'); echo $height; height=${height//[!0-9]/}; echo $height; done
(null)
(null)

Eu já tentei, alterando "$file" para '$file' e $file , mas nenhum deles funciona, estou faltando alguma coisa?

    
por The Wolf 14.04.2015 / 20:04

2 respostas

4

Você escreveu *.{mkv} em vez de *.mkv . Portanto, o loop irá apenas fazer um loop sobre o "arquivo" *.{mkv} que não existe. Nesse caso, a saída de mediainfo está simplesmente vazia.

Adicione algo como echo "$file" em seu loop para verificar.

    
por 14.04.2015 / 20:12
2

Remova o '{}' da parte 'para o arquivo'. Deveria ser assim:

for file in *.mkv; do height=$(mediainfo "$file" | grep -E 'Height'); echo $height; height=${height//[!0-9]/}; echo $height; done

No seu código, o "*. {mkv}" está expandindo para todos os arquivos que terminam em '. {mkv}' dos quais, presumo, não existem, então a lista na instrução for volta vazia.

    
por 14.04.2015 / 20:14