Linuxコマンドラインで再帰的にPDFサムネイルを作成する方法

Linuxコマンドラインで再帰的にPDFサムネイルを作成する方法

ImageMagickを使用してPDFの最初のページのサムネイルを作成できます。

convert -thumbnail x80 95.pdf[0] thumb_95.png

これはうまくいきます親指_95.png文書。

xargsを使用して「検索」の複数の置換を試しましたが、ソースPDFと一緒にフォルダにサムネイルを作成する組み合わせを取得することはできません。

PDFはUUIDという名前のフォルダにあります。例:

/511017a7-67fc-4897-80c1-0d42ac100b68/415.pdf
/511015bc-e0a8-4ab7-ba29-0ce9ac100b68/122.pdf

私が望む結果は次のとおりです。

/511017a7-67fc-4897-80c1-0d42ac100b68/415.pdf
/511017a7-67fc-4897-80c1-0d42ac100b68/thumb_415.png
/511015bc-e0a8-4ab7-ba29-0ce9ac100b68/122.pdf
/511015bc-e0a8-4ab7-ba29-0ce9ac100b68/thumb_122.png

すべての* .pdfに対してこの変換を再帰的に実行するための最良の方法についてご協力いただきありがとうございます。

答え1

難しい部分は、フォームのファイル名をtestfile.pdf.png出力にインポートできないことです。私は数年前に同じ問題を経験し、次のヘルパースクリプトを使用して問題を解決しました(少しの修正を含む)。

#!/bin/bash 
SRCFRM=pdf
TGTFRM=png
FILE=$1

NEWFILE=$(echo $FILE | sed "s:$SRCFRM\$:$TGTFRM:")
convert -thumbnail x80 $FILE[0] $NEWFILE

ホームディレクトリと同じ場所に保存し、次のように使用します。

find /path -name '*.pdf' -exec /path/to/converthelper.sh {} \;

答え2

欲しい

  • すべてのPDFに再帰:

    1. globstarを有効にするにはshopt -s globstar
    2. *.pdf現在のディレクトリにあるすべてのファイルのリストを生成するには、次を使用します。**/*.pdf
    3. そのファイルを繰り返すループを作成します。

      for filename in **/*.pdf
      do
          something
      done
      
  • 今ファイルで何かをしようとしていますconvert -thumbnail x80 95.pdf[0] thumb_95.png。いくつかの方法があります。私は通常を使用します。basename場合によっては、必要があります$(dirname $filename)/$(basename $filename .pdf).pngが、もう一つの興味深く簡単な方法は、次を使用することです。Bash用の文字列操作ツール:

    1. .pdfファイル名の末尾から削除します。${filename%.pdf}
    2. 次に追加.png:${filename%.pdf}.png

最後に、私たちはそれらを互いに貼り付けることができます(ここではglobstarが必要であることを忘れないでくださいshopt -s globstar):

for filename in **/*.pdf
do
    convert -thumbnail x80 $filename[0] ${filename%.pdf}.png
done

答え3

この試み:

find /source/directory -name "*.pdf" -exec \ sh -c 'convert -thumbnail x80 {} $(dirname {})/thumb_$(basename {})' \;

少し修正する必要がありました。

find /source/directory -name "*.pdf" -exec \ sh -c 'convert -thumbnail x80 {} $(dirname {})/thumb_$(basename {} .pdf)'.png \;

デフォルト名からファイル拡張子を削除するには、.pngを追加します。

すべての回答に感謝します。これは私にとって非常に効果的です!

関連情報