我找到了一個聲稱可以做一個文件夾的解決方案,但我有一個深層文件夾層次結構的樂譜,我想從png批量轉換爲PDF格式。我的解決方案是什麼樣的?將PNG批量轉換爲單個PDF,同時在bash中保持深層文件夾層次結構
我會遇到進一步的問題,這可能會使事情變得複雜。也許我應該寫一個腳本? (我總共n00b fyi)
「進一步的問題」是我的一些活頁樂譜跨越了多頁,所以如果腳本可以解析包含「1of2」和「2of2」的文件名整合成一個pdf,這將是整潔。
我在這裏有什麼選擇?
非常感謝。
我找到了一個聲稱可以做一個文件夾的解決方案,但我有一個深層文件夾層次結構的樂譜,我想從png批量轉換爲PDF格式。我的解決方案是什麼樣的?將PNG批量轉換爲單個PDF,同時在bash中保持深層文件夾層次結構
我會遇到進一步的問題,這可能會使事情變得複雜。也許我應該寫一個腳本? (我總共n00b fyi)
「進一步的問題」是我的一些活頁樂譜跨越了多頁,所以如果腳本可以解析包含「1of2」和「2of2」的文件名整合成一個pdf,這將是整潔。
我在這裏有什麼選擇?
非常感謝。
更新回答
作爲替代,下面應該會更快(因爲它在並行轉換),也能夠處理的文件數量較大:
find . -name \*.png -print0 | parallel -0 convert {} {.}.pdf
它採用GNU並行這是現成的在Linux/Unix的d可使用簡單地安裝在OSX與homebrew
:
brew install parallel
原來的答案(如接受)
如果你有bash
4或以上版本,你可以使用extended globbing
遞歸目錄和做你的工作很乾脆:
首先使extended globbing
有:
shopt -s globstar
然後遞歸地將PNG轉換爲PDF:
mogrify -format pdf **/*.png
您可以在文件夾層次遍歷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
參見:
關於深文件夾層次結構你可以使用find和-exec選項。 首先你會發現在每一個子文件夾中所有的PNG圖像,並將其轉換爲PDF格式:
find ./ -name \*\.png -exec convert {} {}.pdf \;
你會得到擴展名爲「.png.pdf」新的PDF文件(image.png將被轉換爲image.png。例如pdf) 要更正擴展名,您可以再次運行find命令,但這次使用-exec選項後的「rename」命令。
find ./ -name \*\.png\.pdf -exec rename s/\.png\.pdf/\.pdf/ {} \;
如果你想刪除源PNG文件,你可以使用這個命令,它會刪除與遞歸在每個子文件夾「.png」後綴的所有文件:
find ./ -name \*\.png -exec rm {} \;
所以這個語法適用於bash,或者這是我將放入腳本的東西嗎?我是否要在文件夾內執行此操作?另外,我可以將「convert」改爲「mogrify」來替換文件,對吧? –
它適用於bash和內部腳本。 –
您應該在包含您放置PNG的所有子文件夾的文件夾中執行它。該命令遞歸搜索文件夾結構(您可以限制它使用-maxdepth和-mindepth選項僅搜索某些級別的文件夾結構)。 是的,find -exec也會與mogrify一起使用。事實上,它應該與任何命令一起工作。 小解釋: 命令執行過程中{b}被替換爲bash命令的第一部分('find ./ -name \ * \。png')找到的文件的名稱和'\;'必須總是在命令結尾 –
如果我的理解:
所以......
轉換的一般語法:
convert 1.png 2.png ... global_png.pdf
以下命令:
convert `find . -name '*'.png -print` global_png.pdf
find
輸入convert
,這是由回報價find
命令(這個非常簡單的命令行工作正常只unspaced文件名,千萬不要錯過報價野生炭,和背面引述find
命令;))
[編輯]護理....
確定你在做什麼。使用convert
沒有任何棘手的-quality
輸出選項可以創建
如果您刪除PNG文件,你只會失去你的原始資料...
convert
與-quality "60"
例如...
也許從[問]開始。 – SiKing