我找到了一个声称可以创建一个文件夹的解决方案,但我有一个深层文件夹层次的乐谱,我想将其从png批量转换为pdf。我的解决方案是什么样的?
我将遇到另一个问题,这可能会使问题复杂化。也许我应该写一个剧本? (我总共n00b fyi)
"进一步的问题"我的一些乐谱跨越多个页面,所以如果脚本可以解析包含" 1of2"的文件名。和" 2of2"要变成单一的PDF文件,这应该是整洁的。
我有什么选择?
非常感谢你。
答案 0 :(得分:1)
您可以循环文件夹层次结构中的png
个文件,并按如下方式处理每个文件:
find /path/to/your/files -name '*.png' |
while read -r f; do
g=$(basename "$f" .png).pdf
your_conversion_program <"$f" >"$g"
done
要合并pdf
- s,您可以使用pdftk
。您需要查找名称中包含pdf
和1of2
的所有2of2
个文件,然后对这些文件运行pdftk
:
find /path/to/your/files -name '*1of2*.pdf' |
while read -r f1; do
f2=${f1/1of2/2of2} # name of second file
([ -f "$f1" ] && [ -f "$f2" ]) || continue # check both exist
g=${f1/1of2//} # name of output file
(! [ -f "$g" ]) || continue # if output exists, skip
pdftk "$f1" "$f2" output "$g"
done
请参阅:
答案 1 :(得分:1)
关于深层文件夹层次结构,您可以使用find with -exec选项。 首先,您在每个子文件夹中找到所有PNG并将其转换为PDF:
find ./ -name \*\.png -exec convert {} {}.pdf \;
您将获得扩展名为&#34; .png.pdf&#34;的新PDF文件(例如,image.png将转换为image.png.pdf) 要更正扩展名,您可以再次运行find命令,但这次使用&#34;重命名&#34;在-exec选项之后。
find ./ -name \*\.png\.pdf -exec rename s/\.png\.pdf/\.pdf/ {} \;
如果要删除源PNG文件,可以使用此命令删除所有文件&#34; .png&#34;在每个子文件夹中递归扩展:
find ./ -name \*\.png -exec rm {} \;
答案 2 :(得分:1)
更新了答案
作为替代方案,以下应该更快(因为它并行执行转换)并且还能够处理更多数量的文件:
find . -name \*.png -print0 | parallel -0 convert {} {.}.pdf
它使用 GNU Parallel ,它可以在Linux / Unix上随时使用,可以使用homebrew
在OSX上简单地安装:
brew install parallel
原始答案(已接受)
如果您拥有bash
版本4或更高版本,则可以使用extended globbing
来递归目录并简单地完成工作:
首先使用以下内容启用extended globbing
shopt -s globstar
然后以递归方式将PNG转换为PDF:
mogrify -format pdf **/*.png
答案 3 :(得分:0)
如果我理解:
所以...
转换的一般语法:
convert 1.png 2.png ... global_png.pdf
以下命令:
convert `find . -name '*'.png -print` global_png.pdf
find
的输出重定向到 convert
的输入,这是通过 返回引用 find
命令(这个非常简单的命令行只能使用未填充的文件名工作正常,不要错过引用外来字符,然后再引用find
命令;)
[编辑]护理....
确定你在做什么。
如果你删除你的png文件,你只会丢失原始资源......
convert
而没有任何棘手的-quality
输出选项可能会创建一个巨大的pdf文件......例如,您可能需要重新convert
-quality "60"
。 。