Variável de eco para arquivo sem novas linhas

0

Eu quero me livrar de novas linhas no Echo, então sufixo um arquivo com elas.

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

Por exemplo, arquivos.txt

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

Por exemplo, preffixedfiles.txt

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

Saída esperada: generatedscript3

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
    
por Ninsto 03.05.2017 / 01:16

1 resposta

0

De acordo com meus comentários, eu acho que a lógica do script que você forneceu é falha - especificamente eu não vejo como o sed é capaz de combinar os 2 arquivos de entrada em uma base por linha (eu não acho que funciona maneira que você acha que faz)

Eu criei uma solução alternativa para você -

#! /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

Explicação:

A linha IFS de exportação altera o caractere de separação de arquivo para nova linha - isso significa que os espaços nos arquivos serão tratados corretamente.

A mágica ocorre no loop for LINE - o comando "paste" mescla os 2 arquivos em uma saída separada por uma única guia, que é então processada linha por linha.

F1 e F2 separam as duas partes da entrada em variáveis, que são impressas usando a linha de eco.

Esta saída inteira é capturada em um arquivo chamado generatedscript3 (porque o loop e o eco estão entre colchetes)

    
por 03.05.2017 / 05:30

Tags