lowriter Bash Скрипт для преобразования всех do c в pdf на месте - PullRequest
1 голос
/ 05 августа 2020

Итак ... Мне было поручено преобразовать кучу файлов * .do c в * .pdf, используя lowriter

Я бы хотел сделать это на месте, но поскольку нет возможности сделать это с помощью lowriter, я решил, что захочу исходный файл и путь, зафиксировать преобразование, а затем переместить преобразованный файл в исходный путь, а затем удалить исходный * .do c

Проблема в том, что мой sed и / или awk в лучшем случае слабый;) поэтому я не могу понять, как я могу «захватить» преобразованное имя файла из вывода.

My Код:

#! / Bin / bash

FILES=/my/path/**/*.doc

shopt -s globstar

for f in $FILES; do

    the_file=$f;
    the_orig_dir=$(dirname "$the_file") ;

    converted=$(lowriter --headless --convert-to pdf "$the_file");
    
    echo $converted;
done;

, а результат:

convert /my/path/Archives/Ally/Heavenly Shop.doc -> /my/Heavenly Shop.pdf using filter : writer_pdf_Export
convert /my/path/Archives/Ally2/Solutions Shop.doc -> /my/Solutions Shop.pdf using filter : writer_pdf_Export
convert /my/path/Archives/Ally3/Xpress Shop.doc -> /my/Xpress Shop.pdf using filter : writer_pdf_Export

Мне нужно захватить путь / имя файла преобразованного файла после -> и до :. Я просто не знаю, как я могу это сделать. Может кто подскажет?

Ответы [ 3 ]

2 голосов
/ 05 августа 2020

Быстрый ответ на заданный вами вопрос заключается в том, что это будет работать с любым sed:

sed 's/.*-> \(.*\) using filter :.*/\1/'

, но я не уверен, что вам действительно нужно это делать. Основываясь на том, что вы разместили, и на ваших комментариях к вопросу, я думаю все, что вам действительно нужно, это:

#!/usr/bin/env bash

shopt -s globstar

docPaths=( /my/path/**/*.doc )

for docPath in "${docPaths[@]}"; do

    pdfPath=$(basename "$docPath" '.doc')'.pdf'

    lowriter --headless --convert-to pdf "$docPath"
    
    printf '%s\n' "$pdfPath"

done
1 голос
/ 05 августа 2020

Следуя комментарию ed motron, стоит упомянуть, что средство записи libraOffice поместит выходной файл с предсказуемым именем на основе --outdir (или текущей рабочей папки) и запрошенного преобразования (pdf). Правила могут использоваться для создания имени выходного файла.

Вышеупомянутый сценарий можно просто записать:

FILES=/my/path/**/*.doc

shopt -s globstar

for f in $FILES; do

    lowriter --headless --convert-to pdf "$f"
    converted=$(basename "$f" .doc).pdf
    # Do something with converted ...    
    echo "Output: $converted"
done;
1 голос
/ 05 августа 2020
#!/bin/bash

FILES=/my/specific/input/folder/**/*.doc

shopt -s globstar

for f in $FILES; do

    the_file=$f;
    the_orig_dir=$(dirname "$the_file") ;

    converted=$(lowriter --headless --convert-to pdf "$the_file");
    
    new_file=$(echo "$converted" | grep -o -P '(?<= -> ).*(?= using filter : )');
    
    new_file_name=$(basename "$new_file");
    
    
    echo "$the_orig_dir/$new_file_name";
    
    
    set -x;
    
    rm -f $the_file;
    
    mv "$new_file" "$the_orig_dir/";
    
    set +x;
    
done;

делает то, что мне нужно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...