У меня есть каталоги (и подкаталоги) с несколькими тысячами PDF-файлов, и я пытаюсь получить общее количество страниц во всех этих PDF-файлах. Поэтому я пробую запустить эту команду:
find . -name \*.pdf -exec pdfinfo {} \; | grep Pages > filelist
И я получаю количество страниц для каждого файла, переданного в filelist
файл.
Мне бы очень хотелось также передать имя файла, но не могу понять, как это сделать ( pdfinfo
возвращает много данных о PDF-файле, но не само имя файла).
решение1
Предварительно добавьте -exec
. -print
Таким образом, имя пути будет напечатано до find
того, как соответствующий pdfinfo
выведет свой вывод. -print
— это действие по умолчанию (например, когда вы запускаете sole find .
), но наличие -exec
подавляет действие по умолчанию.
Если вы предпочитаете путь после вывода соответствующего, pdfinfo
то вы можете попробовать -exec … -print
, но обратите внимание, что в этом случае -print
будет выполнено iff -exec
(ie pdfinfo
) успешно. В общем случае используется iff, -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
каталогов и т.п.