скрипт пакетной обработки img2pdf

Вопрос или проблема

В настоящее время у меня более 10 000 папок. Каждая папка содержит изображения .png и .jpg, которые нужно превратить в файлы .pdf. Файлы уже упорядочены по номерам.

Я ищу скорость. В настоящее время я могу войти в каждую папку и выполнить

img2pdf * -o out.pdf

И я получаю прекрасно созданный out.pdf менее чем за секунду, даже с несколькими сотнями изображений.

Моя конечная цель – автоматизировать это в shell-скрипте, который можно вызвать, так чтобы каждая папка в конечном итоге превращалась в файл .pdf с тем же именем, что и старая директория, как так:

Directory001/img001.jpg
             img002.jpg
             img003.jpg
OtherDirectory/img1.png
               img2.png
               img3.png

превращается в

Directory001.pdf
OtherDirectory.pdf

используя только img2pdf для этого, так как это самый быстрый способ создания pdf. У меня есть некоторый опыт работы с bash, но только с простыми однострочными командами (например, превращение всех директорий в zip). Я знаю, что это можно сделать, но не знаю, с чего начать.

Чтобы выполнить команду для большого количества файлов или директорий, часто используют find -exec следующим образом:

find . -type d -exec "img2pdf" "{}"/* -o "{}".pdf ";"

Этот метод наиболее гибкий, но в вашем случае вы также можете использовать простой цикл:

for i in ./*/
   do img2pdf "$i"/* "$i.pdf"
done

Попробуйте это

#!/bin/bash
#set -xf
TOPDIR=$PWD
dirs=($(find . -type d))
for dir in "${dirs[@]}"; do
  #echo $dir
  cd $dir
  #echo $PWD
  img2pdf --out $dir.pdf *.jpg
  cd $TOPDIR
done

Ответ или решение

Создание пакетного скрипта для конвертации изображений в PDF с помощью img2pdf может оказаться полезным инструментом для автоматизации обработки большого объема изображений. Рассмотрим, как вы можете настроить такой скрипт в Linux-среде.

Шаг 1: Подготовка окружения

Перед началом убедитесь, что у вас установлен пакет img2pdf. Вы можете проверить это, выполнив команду:

img2pdf --version

Если программа не установлена, её можно установить через пакетный менеджер. Для пользователей Ubuntu:

sudo apt-get install img2pdf

Шаг 2: Написание скрипта

Ниже представлен пример bash-скрипта, который будет обходить все подкаталоги в текущей директории и конвертировать все изображения в формате JPG и PNG в PDF-файлы с именем, соответствующим имени директории.

#!/bin/bash

# Сохранение текущего каталога
TOPDIR=$PWD

# Поиск всех директорий и их конвертация в PDF
find . -type d | while read dir; do
  # Переходим в директорию
  cd "$dir"

  # Проверка наличия изображений в директории
  if ls *.jpg 1> /dev/null 2>&1 || ls *.png 1> /dev/null 2>&1; then
    # Конвертация изображений в PDF
    img2pdf *.jpg *.png -o "${dir##*/}.pdf"
  fi

  # Возвращаемся в исходный каталог
  cd "$TOPDIR"
done

Шаг 3: Объяснение скрипта

  1. Сохранение текущего каталога: TOPDIR=$PWD будет использоваться позже для возврата в исходный каталог.

  2. Поиск директорий: Используя find . -type d, мы находим все подкаталоги, начиная с текущего местоположения.

  3. Цикл по директориям: while read dir позволяет обрабатывать каждую найденную директорию по очереди.

  4. Переход в директорию: cd "$dir" перемещает нас в текущую директорию.

  5. Проверка наличия изображений: Используя ls, мы проверяем, есть ли в директории файлы формата jpg или png.

  6. Конвертация в PDF: Команда img2pdf *.jpg *.png -o "${dir##*/}.pdf" объединяет и конвертирует все изображения в текущей директории в PDF файл с именем директории.

  7. Возврат в исходный каталог: По окончании обработки директории, cd "$TOPDIR" возвращает к исходному местоположению.

Шаг 4: Запуск скрипта

Сохраните этот скрипт в файл, например, convert_to_pdf.sh, и затем выполните следующую команду для предоставления ему прав на выполнение:

chmod +x convert_to_pdf.sh

Запустите скрипт:

./convert_to_pdf.sh

Заключение

С помощью этого скрипта вы сможете быстро и эффективно конвертировать огромное количество изображений из различных директорий в PDF-файлы. Это решение обеспечивает автоматизацию и значительно сокращает время, затрачиваемое на ручную конвертацию файлов.

Обязательно протестируйте скрипт в тестовой среде перед использованием на всех ваших данных, чтобы избежать потери информации или случайного перезаписывания файлов.

Оцените материал
Добавить комментарий

Капча загружается...