Вопрос или проблема
В настоящее время у меня более 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: Объяснение скрипта
-
Сохранение текущего каталога:
TOPDIR=$PWD
будет использоваться позже для возврата в исходный каталог. -
Поиск директорий: Используя
find . -type d
, мы находим все подкаталоги, начиная с текущего местоположения. -
Цикл по директориям:
while read dir
позволяет обрабатывать каждую найденную директорию по очереди. -
Переход в директорию:
cd "$dir"
перемещает нас в текущую директорию. -
Проверка наличия изображений: Используя
ls
, мы проверяем, есть ли в директории файлы формата jpg или png. -
Конвертация в PDF: Команда
img2pdf *.jpg *.png -o "${dir##*/}.pdf"
объединяет и конвертирует все изображения в текущей директории в PDF файл с именем директории. -
Возврат в исходный каталог: По окончании обработки директории,
cd "$TOPDIR"
возвращает к исходному местоположению.
Шаг 4: Запуск скрипта
Сохраните этот скрипт в файл, например, convert_to_pdf.sh
, и затем выполните следующую команду для предоставления ему прав на выполнение:
chmod +x convert_to_pdf.sh
Запустите скрипт:
./convert_to_pdf.sh
Заключение
С помощью этого скрипта вы сможете быстро и эффективно конвертировать огромное количество изображений из различных директорий в PDF-файлы. Это решение обеспечивает автоматизацию и значительно сокращает время, затрачиваемое на ручную конвертацию файлов.
Обязательно протестируйте скрипт в тестовой среде перед использованием на всех ваших данных, чтобы избежать потери информации или случайного перезаписывания файлов.