parâmetro de script que contém espaços invocando mediainfo

0

Eu gostaria de criar um pequeno script de shell que me dirá a duração de um vídeo cujo nome de arquivo é passado para ele como um parâmetro. Seria algo assim:

$ script_name "file name with spaces.webm" # or any other media file extension

O arquivo de script se parece com

#/bin/bash
SECRET_SAUCE_USING_$1 | mediainfo | grep Duration | sort -u
# maybe SECRET_SAUCE_USING_$1 | xargs -0 mediainfo . . .

Na linha de comando, é isso que funciona e o que eu quero que o script faça:

$ mediainfo file\ name\ with\ spaces.webm | grep Duration | sort -u

Eu tentei usar coisas como

echo "$1" | sed 's/ /\ /g' # piped to mediainfo . . .

para alterar os espaços no nome do arquivo para os pares de caracteres '\' (sem as aspas). O eco ... | sed ... parte funciona, mas mediainfo barfs

e

echo "$1" | tr ' ' '
$ script_name "file name with spaces.webm" # or any other media file extension
0' | xargs -0 mediainfo . . .

para alterar os espaços para nulos e obter xargs para invocar mediainfo com nulos no nome do arquivo em vez de espaços.

Ainda não encontrei uma solução. (Eu realmente uso zsh, não bash.) Toda ajuda muito apreciada. Tnx.

    
por Don Nadie 29.01.2018 / 18:20

1 resposta

1

Se você quiser que o parâmetro do script ( $1 ) termine como parâmetro do mediainfo, basta colocá-lo lá:

# ...
mediainfo "$1" | grep Duration | sort -u
# ...

Isso funciona para um único parâmetro no script. De maneira mais flexível, você pode passar por cima de todos os parâmetros do script e alimentá-los, um de cada vez, para mediainfo:

for file in "$@"
do
  mediainfo "$file" # ...
done
    
por 29.01.2018 / 18:28