Форум русскоязычного сообщества Ubuntu


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: Скрипт переименования pdf на основе данных ISBN  (Прочитано 2037 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Magi

  • Автор темы
  • Участник
  • *
  • Сообщений: 109
    • Просмотр профиля
Есть много несортированных книг в pdf(большинство) и djvu хочу сделать скрипт, который на основе их ISBN-номера (Международный стандартный книжный номер)
переименует их в файл вида "Название автор год_издания.pdf" и поделится с ним общественностью.

Нашел программу
http://pdfgrep.sourceforge.net/

Она может найти ISBN в книгах

pdfgrep -H -С line --color none ISBN *.pdf

Выводит примерно следующее.

0123813662.pdf:ISBN: 978-0-12-415833-7 set
0123813662.pdf:ISBN: 978-0-12-381365-7 volume 1
0123813662.pdf:ISBN: 978-0-12-381366-4 volume 2
0123983894PainBrain.pdf:ISBN: 978-0-12-398389-3
0124114687_Neurosc.pdf:ISBN: 978-0-12-411468-5
0323057241_Dentistr.pdf:EDITION                       ISBN: 978-0-323-05724-0
0323057241_Dentistr.pdf:ISBN: 978-0-323-05724-0
0323079547_Spine.pdf:   ISBN 978-0-323-07954-9 (hardcover: alk. paper)
0323079547_Spine.pdf: ISBN: 978-0-323-07954-9
0323085008_Care.pdf:ISBN: 978-0-323-08500-7
0323085008_Care.pdf:   ISBN 978-0-323-08500-7 (pbk. : alk. paper)
0340815892_OSCEs.pdf:ISBN-10: 0 340 81589 2
0340815892_OSCEs.pdf:ISBN-13: 978 0 340 81589 2
0444538569_Histopath.pdf:ISBN: 978-0-444-53856-7
0lq65.Atlas.of.Postsurgical.Neuroradiology.Imaging.of.the.Brain.Spine.Head.and.N
0lq65.Atlas.of.Postsurgical.Neuroradiology.Imaging.of.the.Brain.Spine.Head.and.N
1047d.Novel.Immune.Potentiators.and.Delivery.Technologies.for.Next.Generation.Va
1047d.Novel.Immune.Potentiators.and.Delivery.Technologies.for.Next.Generation.Va
161779614X.pdf:ISBN 978-1-61779-614-2                    e-ISBN
161779614X.pdf:978-1-61779-614-2                    e-ISBN 978-1-61779-615-9
1617799459.pdf:ISBN 978-1-61779-945-7                             ISBN
1617799459.pdf:ISBN 978-1-61779-946-4          (eBook)

Нужно из этого взять первую строку с найденным ISBN для каждого файла, из нее убрать все кроме самого номера
В номере не должно быть пробелов и тире и переименовать исходный файл в isbn.pdf


Нужно на основе этого переименовывать файлы из оригинального расширения в ISBN.pdf

Нашел скрипт на Java, который переименует файлы вида ISBN.pdf в "Название.pdf" с помощью доступа к isbndb.com
ISBNDB API KEY: 4LQGZXOY (ограничение в 500 запросов в день)

https://code.google.com/p/sangupta/wiki/ISBN

Или есть вариант без API http://openisbn.com/download/3319013653.html, где 3319013653 - ISBN

Подскажите, как это все совместить в один скрипт?
Сам я не программист.

PS. Нашел еще один скрипт на python https://pypi.python.org/pypi/biblio.webquery/
Который вроде бы болжен делать все вышеперечисленное, но почему-то не всегда находит ISBN.
pdfgrep в этом отношении надежнее.

Оффлайн ArcFi

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Нужно из этого взять первую строку с найденным ISBN для каждого файла, из нее убрать все кроме самого номера
В номере не должно быть пробелов и тире и переименовать исходный файл в isbn.pdf
В первом приближении:
Код: (bash) [Выделить]
DIR="/путь/до каталога"
find "$DIR" -type f -iname '*.pdf' | while read FILE
do
    ISBN="$(pdfgrep ... | head -n1 | awk '/ISBN/{print $2}' | tr -d '-')"
    echo mv -i "$FILE" "$(dirname $FILE)/$ISBN.pdf"
done
« Последнее редактирование: 05 Ноябрь 2013, 16:24:09 от ArcFi »

Оффлайн Magi

  • Автор темы
  • Участник
  • *
  • Сообщений: 109
    • Просмотр профиля
#!/bin/bash

    find "$DIR" -type f -iname '*.pdf' | while read FILE
    do
        ISBN="$(pdfgrep -H -С line --color none ISBN *.pdf | head -n1 | awk '/ISBN/{print $2}' | tr -d '-')"
        echo mv -i "$FILE" "$(dirname $FILE)/$ISBN.pdf"
    done

find: невозможно искать `': Нет такого файла или каталога
Менял ' на " - ошибка та же.

Оффлайн ArcFi

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Вначале скрипта присвойте значение переменной:
Код: (bash) [Выделить]
DIR="/путь/до каталога"

Оффлайн Magi

  • Автор темы
  • Участник
  • *
  • Сообщений: 109
    • Просмотр профиля
Долго работал, но результат 0.
Хотя отдельно запущенная pdfgrep -H --color none ISBN *.pdf
Выдает примерно следующее:

Central Auditory Pathway Disorders.pdf:ISBN 978-4-431-26654-9 Springer Tokyo
Central Auditory Pathway Disorders.pdf:e-ISBN 978-4-431-26920-5
esmegeol.pdf:been previously published by Elsevier in 2005 (ISBN 0-12-636341-2)
esmegeol.pdf:ISBN 978-94-007-4374-8                     ISBN 978-94-007-4375-5

Ни один файл не переименовался.

Оффлайн ArcFi

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Там echo перед mv, чтобы сперва проверить.
Если всё устраивает, то слово echo можно убрать.

Оффлайн Magi

  • Автор темы
  • Участник
  • *
  • Сообщений: 109
    • Просмотр профиля
Что-то все равно не так.

mv: невозможно переместить «/home/ppaa/pdf/10598.BMAT and UKCAT Uncovered A Guide to Medical School Entrance Exams by T. O. Osinowo.pdf» в «/home/ppaa/pdf\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n.\n./11297.Pharmaceutical R and D Costs, Risks and Rewards by Office of Technology Assessment.pdf:ISBN.pdf»: Нет такого файла или каталога


Оффлайн ArcFi

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Вероятно, pdfgrep не всегда выводит ISBN в первой строке, поэтому задача сложнее, чем вы описывали.

 

Страница сгенерирована за 0.07 секунд. Запросов: 25.