Как использовать текущее имя файла несколько раз в команде pipe?

Как использовать текущее имя файла несколько раз в команде pipe?

Я пытаюсь преобразовать пакет файлов .mov в mp4. Как мне получить имя файла из канала для генерации команды ffmpeg? Как использовать аргумент канала несколько раз в цепочке ссылок? Я пытаюсь сделать что-то вроде этого:

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

решение1

Трубы полезны, когда вы хотите использоватьстандартный вывододной команды какстандартный вводдругой команды. Но вам нужно передать файл в качестве входных данных в ffmpeg, а не имена файлов на его стандартном входе. И вам нужно запустить ffmpegнесколько раз, по одному разу для каждого входного файла, чтобы получить выходной файл.

Короче говоря, каналы для этого бесполезны, вам нужен цикл, как предлагалось в другом ответе. Но следует заключить параметры имени файла в двойные кавычки:

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

Вы упомянули в комментарии, что можете написать скрипт Perl. Это было бы действительно излишеством. Bash — более простой, идеально подходящий подход. Обратите внимание, что вы можете написать приведенный выше скрипт в одну строку и запустить его прямо в командной строке.

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

решение2

Вы можете сделать это с помощью простого forцикла

#!/bin/bash

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

    echo "Converting $file"
done

Связанный контент