Я хочу избавиться от новых строк в Echo, а затем добавить к ним суффикс файла.

files=$(cat ./Temp/files.txt)
prefixedfiles=$(cat ./Temp/prefixedfiles.txt)
echo "$files" >> generatedscript
sed -e 's/^/ffmpeg -i /' generatedscript >> generatedscript2
sed 's/$/ -vcodec libx264 -acodec copy -threads 10 -crf 18 /' >> 
generatedscript2
echo "$prefixedfiles" > generatedscript3

Например, files.txt

./Testing/blank.mp4
./More Testing/Test.mkv

Например, prefixedfiles.txt

../Encoded/Testing/blank.mp4
../Encoded/More Testing/Test.mkv

Ожидаемый результат: generatescript3

ffmpeg -i ./Testing/blank.mp4 -vcodec libx264 -acodec copy -threads 10 -crf 18 ../Encoded/More Testing/blank.mp4
ffmpeg -i ./More Testing/Test.mkv -vcodec libx264 -acodec copy -threads 10 -crf 18 ../Encoded/More Testing/Test.mkv

1 ответ1

0

Что касается моих комментариев, я думаю, что логика предоставленного вами скрипта неверна - в частности, я не вижу, как sed может комбинировать 2 входных файла для каждой строки (я не думаю, что это работает так, как вы думаете оно делает)

Я придумал альтернативное решение для вас -

#! /bin/bash

export IFS=$'\n'

(
for LINE in `paste Temp/files.txt Temp/prefixedfiles.txt`
do
    F1=`echo $LINE | cut -f1`
    F2=`echo $LINE | cut -f2`    
    echo "ffmpeg -i $F1 -vcodec libx264 -acodec copy -threads 10 -crf 18 $F2"

done 
) > generatedscript3

Объяснение:

Строка IFS экспорта изменяет символ разделения файлов на символ новой строки - это означает, что пробелы в файлах будут правильно обрабатываться.

Волшебство происходит в цикле for LINE - команда "paste" объединяет 2 файла в один вывод с разделением табуляцией, который затем обрабатывается построчно.

F1 и F2 разделяют 2 части ввода на переменные, которые затем печатаются с использованием линии эха.

Весь этот вывод записывается в файл с именем generatescript3 (потому что цикл и эхо находятся в скобках)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .