私のディレクトリに複数のPDFファイルがあります。 PDFライブラリを活用して、特定のページを新しいファイル(別々の出力フォルダ)に保存したいと思います。
最良のアプローチは何ですか?
これは私が書いたコードですが、より多くの追加が必要です。
#!/bin/bash
# Saves 1st 4 pages or every pdf file to a new file.
for i in *.pdf; do
pdfcpu trim -pages "1-4" ${i}.pdf output ${i + %}.pdf
done
このコードは機能しませんが、このレベルまで来ました。私の質問、
- 各ファイルを繰り返す方法
- 最初の4ページだけを別のフォルダに保存してください。
答え1
あなたは近いです。
#! /bin/bash -
shopt -s nullglob
mkdir -p trimmed || exit
ret=0
for file in ./*.pdf; do
pdfcpu trim -pages 1-4 "$file" "trimmed/$file" || ret="$?"
done
exit "$ret"
./
globを使用するとき。で終わらないようにプレフィックスを使用するのが最善です-
。- Bash / shでは、パラメータ拡張を引用する必要があります。
- Bash / shでglobが一致しない場合、パターンはそのままコマンドに渡されます。 Bashでは、この機能を使用して
shopt -s nullglob
(またはfailglob
他の効果を使用して)このエラーを解決できます。 $i
ループに.pdf
拡張子を含む完全なファイル名を含めます。を使用すると、${i}.pdf
2つの拡張子が作成され、pdfcpu
そのfile.pdf.pdf
ファイルが見つかりません。${i + %}
無意味。これで何を達成したいのか明確ではありません。$file
==の出力ファイル名をfile.pdf
として指定するには、それを出力ファイルパスに渡すtrimmed/file%.pdf
ことができます。"trimmed/${file%.pdf}%.pdf"
- ~によると手動、そこにはいけません
output
。 - 失敗に注意を払い、失敗が発生した場合に何をすべきかを覚えておいてください。ここで
pdfcpu
コマンドが失敗すると、残りのコマンドは引き続き実行されますが、スクリプトの終了ステータスに失敗を報告します。