lowriter Bash脚本将所有文档就地转换为pdf



所以。。我的任务是使用lowriter将一堆*.doc文件转换为*.pdf

我想做的是在适当的位置执行此操作,但由于无法使用lowriter进行此操作,我想我应该捕获原始文件和路径,捕获转换,然后将转换后的文件移动到原始路径,然后删除原始*.doc

问题是我的sed和/或awk充其量是弱的;(所以我不知道我怎么能";捕获";从输出转换的文件名。

我的代码:

#/垃圾桶/垃圾桶

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

我需要做的是捕获->之后和:之前的转换文件的路径/文件名。我只是不知道我该怎么做。有人能告诉我吗?

您所问问题的快速答案是,这将使用任何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 '%sn' "$pdfPath"
done
#!/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;

做需要的事吗

根据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;

最新更新