複数のPDFにpdfinfoを使用し、ファイル名とページ数を抽出します。

複数のPDFにpdfinfoを使用し、ファイル名とページ数を抽出します。

数千の PDF を含むディレクトリ (およびサブディレクトリ) があり、それらすべての PDF の合計ページ数を取得しようとしていました。そこで、次のコマンドを実行してみます。

find . -name \*.pdf -exec pdfinfo {} \; | grep Pages > filelist

そして、ファイルにパイプされた各ファイルのページ数を取得しますfilelist

ファイル名もパイプで渡したいのですが、その方法がわかりません ( pdfinfoPDF に関する多くのデータが返されますが、ファイル名自体は返されません)。

答え1

-execを前に付けます。この方法では、それぞれの出力を印刷する前に-print、パス名が によって印刷されます。はデフォルトのアクションです (例: sole を実行した場合) が、 の存在によりデフォルトが抑制されます。findpdfinfo-printfind .-exec

それぞれの出力の後にパス名を置きたい場合はpdfinfo、 を試すことができます-exec … -printが、この場合、が (つまり) が成功した-print場合にのみ が実行されることに注意してください。一般に、 がテストとして使用される場合、を使用します。質問の文脈では、個人的にはパス名を最初に置きたいので、 です。-execpdfinfo-exec … -print-exec-print -exec …

次に、 を調整する必要があります。 が考慮するすべてのパス名はで始まる必要があるgrepという事実を使用します。は、先頭にリテラル ドットがある行、または先頭に文字列がある行と一致します。find ..grep -E '^(\.|Pages)'Pages

最終的なコマンドは次のようになります。

find . -name \*.pdf -print -exec pdfinfo {} \; | grep -E '^(\.|Pages)'

(出力は自分でリダイレクトしてください)。

-type f何らかの不規則な場合に備えて、最初のテストとして検討してくださいファイル偶然に一致するもの。これにより、ディレクトリなどの-name \*.pdf呼び出しを回避できます。pdfinfo

関連情報