Пакетное преобразование через filelist.csv

Вы можете просто безоговорочно запустить sed для файла, если хотите:

sed -i .bak -Ee 's/^PASS_WARN_AGE\s+0/PASS_WARN_AGE    7/' /etc/login.defs

Я бы с осторожностью использовал шаблон вроде \ s \ s \ s \ s , поскольку количество пробелов может отличаться. Я не думаю, что \ s является стандартным, но я полагаю, что если контекст - RHEL, у вас все равно будет GNU sed.

2
17.11.2018, 04:12
2 ответа

Думаю, вам нужно что-то вроде:

$ cat mkv-analysis.csv | xargs -I % ffmpeg ...

% - аргумент, в вашем случае путь к файлу.

при условии, что mkv-analysis.csv имеет формат:

file-path1
file-path2
...

Если формат отличается, вам придется подготовить его с помощью awk : Например :

$ awk '...awk script...' mkv-analysis.csv | xargs ffmpeg ...

Главное, чтобы xargs кормил ffmpeg файлами, и на этом этапе ffmpeg должен быть в состоянии найти файл.

0
27.01.2020, 22:10

Вы используете одинарные кавычки вокруг $ file , что означает, что переменная не раскрывается:

$ var="foo"
$ echo "$var"
foo
$ echo '$var'
$var

Итак, команда, которую вы ищете (с некоторыми дополнительными улучшениями):

while read -r file; do 
    ffmpeg -i "$file" -c:v libx265 -x265-params crf=23 -preset medium -c:a copy -c:s copy "${file%.mkv}_new.mkv"
done < mkv-analysis.csv 

Обратите внимание, что нет необходимости в cat и совершенно бессмысленно запускать команду в качестве подстановки команды ( $ (command) ). Это необходимо только тогда, когда вы хотите зафиксировать вывод команды в переменной.

2
27.01.2020, 22:10

Теги

Похожие вопросы