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


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

Автор Тема: Скрипт переименования pdf на основе  (Прочитано 1934 раз)

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

Оффлайн Magi

  • Автор темы
  • Участник
  • *
  • Сообщений: 116
    • Просмотр профиля
В результате восстановления pdf-файлов после сбоя на диске появилось более 100000 pdf-файлов с именами, состоящими из цифр.
pdfinfo из комплекта xpdf выдает о таких файлах следующую информацию

pdfinfo 121324235245.pdf
Title: 6211-I1 ADSL2+ Router Command Line Interface User's Guide
Author: Zhone Technologies, Inc.
Creator: Acrobat PDFMaker 6.0 for Word
Producer: Acrobat Distiller 6.0.1 (Windows)
CreationDate: 03/02/06 15:32:25
ModDate: 03/02/06 15:35:17
Tagged: no
Form: none
Pages: 6
Encrypted: no
Page size: 612 x 792 pts (letter)
File size: 141317 bytes
Optimized: yes
PDF version: 1.6

Title можно использовать в имени файла.
Подскажите пожалуйста, как написать shell-скрипт который будет переименовать pdf файл, если Title заполнен и оставить, так, как есть, если Title — пустой?

Оффлайн vasilisc

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 2563
  • г.Северодвинск - строим АПЛ
    • Просмотр профиля
    • Авторские статьи об OpenSource
Re: Скрипт переименования pdf на основе
« Ответ #1 : 24 Августа 2012, 11:41:58 »
#!/bin/sh
clear
for file in *
do
    echo --- "$file" ----
    title=`pdfinfo "$file" | grep Title | cut -d":" -f2 | sed 's/^[ \t]*//'`
    echo "$title"
if [ -n "$title" ]; then
    mv "$file" "$title.pdf"
fi
done
Создайте скрипт и поместите его рядом с вашими файлами и запустите его sh имяскриптаЕсли я реально помог, то
(Нажмите, чтобы показать/скрыть)

Оффлайн Magi

  • Автор темы
  • Участник
  • *
  • Сообщений: 116
    • Просмотр профиля
Re: Скрипт переименования pdf на основе
« Ответ #2 : 14 Октября 2012, 16:23:21 »
Гм, сейчас почему-то не работает.

sh rename.sh
: not found2: rename.sh: clear
rename.sh: 4: rename.sh: Syntax error: word unexpected (expecting "do")

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Re: Скрипт переименования pdf на основе
« Ответ #3 : 14 Октября 2012, 17:09:58 »
Чуток оптимизировал:
Код: (bash) [Выделить]
#!/bin/bash

cd "/path/to/pdfs" || exit 1
find -iname "*.pdf" | while read FNAME_OLD
do
PDF_AUTHOR=$(pdfinfo "$FNAME_OLD" | awk -F 'Author: *' '/^Author:/{print $2}')
PDF_TITLE=$(pdfinfo "$FNAME_OLD" | awk -F 'Title: *' '/^Title:/{print $2}')
if [ -n "$PDF_AUTHOR" -o -n "$PDF_TITLE" ]
then
FNAME_NEW=$(dirname "$FNAME_OLD")/$(echo "$PDF_AUTHOR, $PDF_TITLE" | sed 's/^, //g;s/, $//g;s/:/-/g').pdf
fi
if [ ! -f "$FNAME_NEW" ]
then
mv "$FNAME_OLD" "$FNAME_NEW"
fi
done

Гм, сейчас почему-то не работает.
chmod +x script.sh ; ./script.sh
« Последнее редактирование: 15 Октября 2012, 09:25:51 от arcfi »

Оффлайн Magi

  • Автор темы
  • Участник
  • *
  • Сообщений: 116
    • Просмотр профиля
Re: Скрипт переименования pdf на основе
« Ответ #4 : 14 Октября 2012, 20:29:06 »
Поправил права в первом скрипте - заработало, второй - циклически запускает pdfinfo с выводом help'а
Можно ли как-то к названию книги прибавлять содержимое строки author, которую pdfinfo выводит.

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Re: Скрипт переименования pdf на основе
« Ответ #5 : 14 Октября 2012, 20:57:13 »
Можно ли как-то к названию книги прибавлять содержимое строки author, которую pdfinfo выводит.
Исправил, добавил автора.
Проверьте.

Оффлайн Magi

  • Автор темы
  • Участник
  • *
  • Сообщений: 116
    • Просмотр профиля
Re: Скрипт переименования pdf на основе
« Ответ #6 : 14 Октября 2012, 21:50:54 »
Спасибо! Все работает отлично!

Пользователь решил продолжить мысль 14 Октября 2012, 23:32:05:
Еще мелочь осталась. В многих именах файлов есть ":" - Windows его не воспринимает? Как можно заменить на "-"?
« Последнее редактирование: 14 Октября 2012, 23:32:05 от Magi »

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: Скрипт переименования pdf на основе
« Ответ #7 : 15 Октября 2012, 08:19:08 »
Чуть-чуть надо подправить для дополнительной замены : на -
FNAME_NEW=$(echo "$PDF_AUTHOR, $PDF_TITLE" | sed 's/^, //g;s/, $//g;s/:/-/g')
ЗЫ. А если не в данном скрипте, а в принципе, то

man rename
« Последнее редактирование: 15 Октября 2012, 08:23:01 от alexander.pronin »

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Re: Скрипт переименования pdf на основе
« Ответ #8 : 15 Октября 2012, 09:26:53 »
Добавил замену ":" на "-".
Исправил баг, приводящий к потере путей.
Исправил баг перезаписи существующих файлов.

Оффлайн astrobeglec

  • Активист
  • *
  • Сообщений: 838
  • Самая тяжелая ноша - пророк в извращенном мире...
    • Просмотр профиля
Re: Скрипт переименования pdf на основе
« Ответ #9 : 15 Октября 2012, 14:42:01 »
Версия 2.0, ждем обновлений... Скоро и до пакета дойдем...
Я вернулся...

Оффлайн Magi

  • Автор темы
  • Участник
  • *
  • Сообщений: 116
    • Просмотр профиля
Re: Скрипт переименования pdf на основе
« Ответ #10 : 15 Октября 2012, 15:03:50 »
Спасибо! Я думаю не только мне пригодится, для работы с книгами в pdf. С вашего позволения поделюсь с народом в тематическом форуме.

Здорово было бы их еще оптимизировать по размеру скриптом, но рабочего варианта я пока не нашел.
pdfopt - делает их больше, чем были :)
http://code.google.com/p/pdfsizeopt/ - падает на моих файлах, буду наверно писать разработчику.

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Re: Скрипт переименования pdf на основе
« Ответ #11 : 15 Октября 2012, 15:14:40 »
Здорово было бы их еще оптимизировать по размеру скриптом, но рабочего варианта я пока не нашел.
Если файлы состоят исключительно из изображений, то можно скормить convert (imagemagick).

Оффлайн Magi

  • Автор темы
  • Участник
  • *
  • Сообщений: 116
    • Просмотр профиля
Re: Скрипт переименования pdf на основе
« Ответ #12 : 15 Октября 2012, 15:38:44 »
Попробую, но зачастую не поймешь, пока не откроешь.

Пользователь решил продолжить мысль 16 Октября 2012, 08:39:44:
Еще такой момент, многие файлы оказались битыми. pdfinfo для них выдает

pdfinfo 190954616.pdf
Error: PDF file is damaged - attempting to reconstruct xref table...
Error: Couldn't find trailer dictionary
Error: Couldn't read xref table

Как их удалить из общей массы?
« Последнее редактирование: 16 Октября 2012, 08:39:44 от Magi »

 

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