2014-09-21 3 views
0

У меня есть несколько папок с электронными книгами, и я хочу извлечь первую страницу из каждой книги. Есть более двухсот книг, поэтому делать это вручную, это большая боль в спине и будет очень трудоемкой.Посетите все подкаталоги и извлеките первую страницу из каждого pdf

У меня есть команда, которая делает работу для одного файла

pdftk TehInput.pdf cat 1 output cover_TehInput.pdf 

Как обернуть это в один сценарий, который посещает все и присваивает имя для вывода как cover_wtv-original-name-is.pdf? Все выходные файлы могут быть повсюду, как в каталоге, где был запущен скрипт или рядом с исходным файлом.

+0

Есть ли причина, по которой вы не можете просто перебирать 'ls'? – shadowtalker

+1

@ssdecontrol: [есть веская причина для этого, да] (http://mywiki.wooledge.org/ParsingLs). –

+0

@gniourf_gniourf Это правда, когда вы пишете надежный код для работы с чужими файлами в контекстах, которые вы не контролируете, да. Но мы все знаем, что синтаксический вывод 'ls' часто является самым простым способом для одноразовой задачи при загрузке файлов, происхождение которых вы знаете, и где вы уверены, что в именах нет новых строк. –

ответ

0

Если вы не используете пробелы или символы новой строки в именах файлов:

find . -iname '*.pdf' -printf "%h %f\n" | sed -E 's|(.*) (.*)|echo pdftk \1/\2 cat 1 output \1/cover_\2|' | sh 

Если выход в порядке, удалить «эхо».

1

Для этого вы хотите использовать команду find. Что-то вроде:

find . -iname '*.pdf' -exec pdftk '{}' cat 1 output '{}'.cover.pdf ';' 

Это будет найти все файлы PDF из текущего каталога (.) вниз и выполнить

pdftk filename.pdf cat 1 output filename.pdf.cover.pdf 

на нем. Это весь путь, который будет передан pdftk, так что вы получите обложки PDF-файлов в том же каталоге, что и исходные файлы. (Вы могли бы сделать что-то, чтобы избавиться от .pdf.cover.pdf расширений, если вам нужно.)

+0

@Cyrus Вы не можете поставить 'cover_' перед' '{} '', потому что '' {}' 'соответствует всему пути, а не только базовому. В конце вы получите 'cover_' перед дорожкой. Вот почему я добавил что-то вместо этого. –

+0

Извините, спасибо за этот намек. – Cyrus