Como usar o nome do arquivo atual várias vezes em um comando de pipe?

Como usar o nome do arquivo atual várias vezes em um comando de pipe?

Estou tentando converter lotes de arquivos .mov para mp4. Como posso obter o nome do arquivo do pipe para gerar o comando ffmpeg? Como usar o argumento pipe várias vezes no elo da corrente? Estou tentando ter algo assim:

 ls *.MOV | ffmpeg -y -i $file  "$file.mp4"

Responder1

Pipes são úteis quando você deseja usar osaída padrãode um comando como oentrada padrãode outro comando. Mas você precisa passar um arquivo como entrada ffmpeg, e não nomes de arquivos em sua entrada padrão. E você precisa executar ffmpegvárias vezes, uma vez para cada arquivo de entrada para obter um arquivo de saída.

Resumindo, pipes não são úteis para isso, você precisa de um loop como a outra resposta sugeriu. Mas deve colocar aspas duplas nos parâmetros do nome do arquivo:

for file in *.MOV; do
    ffmpeg -y -i "$file" "$file.mp4"
done

Você mencionou em um comentário que poderia escrever um script Perl. Isso seria realmente um exagero. Bash é uma abordagem mais simples e perfeitamente adequada. Observe que você pode escrever o script acima em uma única linha e executá-lo diretamente na linha de comando.

for file in *.MOV; do ffmpeg -y -i "$file" "$file.mp4"; done

Responder2

Você poderia fazer isso usando um forloop simples

#!/bin/bash

for file in /path/to/*.MOV
do

    echo "Converting $file"
done

informação relacionada