数千の PDF を含むディレクトリ (およびサブディレクトリ) があり、それらすべての PDF の合計ページ数を取得しようとしていました。そこで、次のコマンドを実行してみます。
find . -name \*.pdf -exec pdfinfo {} \; | grep Pages > filelist
そして、ファイルにパイプされた各ファイルのページ数を取得しますfilelist
。
ファイル名もパイプで渡したいのですが、その方法がわかりません ( pdfinfo
PDF に関する多くのデータが返されますが、ファイル名自体は返されません)。
答え1
-exec
を前に付けます。この方法では、それぞれの出力を印刷する前に-print
、パス名が によって印刷されます。はデフォルトのアクションです (例: sole を実行した場合) が、 の存在によりデフォルトが抑制されます。find
pdfinfo
-print
find .
-exec
それぞれの出力の後にパス名を置きたい場合はpdfinfo
、 を試すことができます-exec … -print
が、この場合、が (つまり) が成功した-print
場合にのみ が実行されることに注意してください。一般に、 がテストとして使用される場合、を使用します。質問の文脈では、個人的にはパス名を最初に置きたいので、 です。-exec
pdfinfo
-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