Пакетная обработка папок с `find` и imagemagick's` montage`

Так что я работал над этим некоторое время и думаю, что готов сдаться. Я пытался обработать подпапки с помощью imagemagick's montage для создания контактных листов.

Это в основном так близко, как я получил:

find '/dir-with-spaces/' -type f -regex ".*\.\(JPG\|jpg\|jpeg\|JPEG\)" -print0 | \
     while IFS= read -r -d  

Используя эту команду, Montage обрабатывает каждую картинку по отдельности. Я хочу, чтобы функция поиска выполняла поиск в нижнем каталоге изображений, создавала резервные копии, отправляла все это на montage и затем продолжала переходить к следующей папке, получив в результате лист контактов с полным деревом папок.

т.е.:

/media/pictures/folder1/folder2/pic1.jpg...pic100.jpg --> media-pictures-folder1-folder2.jpg

Несколько других вещей, которые я пытался придумать:

#This just hangs montage forever
find . -name *.jpg -printf '%h\n' | sort -u | xargs -I {} montage {}/*

#I need a "+" here for -execdir, but I don't think I can use it with montage's argument structure.
find . -name *.jpg -execdir montage {} test.jpg \;

Структура каталогов выглядит примерно так:

folder1
  folder1_1
    folder1_2
      folder1_3
        *.jpg
folder2
  folder2_1
    *.jpg
folder3
  folder3_1
    folder3_2
      folder3_4
        folder3_5
          *.jpg

Запуск Ubuntu 14.10

Любая помощь по этому вопросу будет принята с благодарностью.

\0' line;\ do \ montage "$line" "${line}".jpg; \ done

Используя эту команду, Montage обрабатывает каждую картинку по отдельности. Я хочу, чтобы функция поиска выполняла поиск в нижнем каталоге изображений, создавала резервные копии, отправляла все это на montage и затем продолжала переходить к следующей папке, получив в результате лист контактов с полным деревом папок.

т.е.:

/media/pictures/folder1/folder2/pic1.jpg...pic100.jpg --> media-pictures-folder1-folder2.jpg

Несколько других вещей, которые я пытался придумать:

#This just hangs montage forever
find . -name *.jpg -printf '%h\n' | sort -u | xargs -I {} montage {}/*

#I need a "+" here for -execdir, but I don't think I can use it with montage's argument structure.
find . -name *.jpg -execdir montage {} test.jpg \;

Структура каталогов выглядит примерно так:

folder1
  folder1_1
    folder1_2
      folder1_3
        *.jpg
folder2
  folder2_1
    *.jpg
folder3
  folder3_1
    folder3_2
      folder3_4
        folder3_5
          *.jpg

Запуск Ubuntu 14.10

Любая помощь по этому вопросу будет принята с благодарностью.

1
задан 7 February 2015 в 17:03

1 ответ

У меня была подобная проблема, но без папок на части имени файла. Рев является сценарием, которые делают то, что Вы спрашиваете. Изменение base к Вашей стартовой папке. montage опции использования -geometry для установки размера мозаики в пкс В «widthВ» xВ «heightВ» и -tile для количества мозаик В «columnsВ» xВ «linesВ».

#!/bin/bash -eu

base="/usr/share/icons/hicolor"
find "$base" -type d | while read fld
do
  [ $fld == $base ] && continue
  echo ">>> $fld"
  aux="${fld//\//_}"
  aux="${aux:1}"
  find "$fld" -type f -maxdepth 1 -iregex ".*\.\(jpg\|jpeg\|gif\|svg\|png\)" > "/tmp/${aux}.txt"

  if [ -s "/tmp/${aux}.txt" ]
  then
    montage "@/tmp/${aux}.txt" -geometry 64x -tile 3x "${aux}.jpg"
  fi
  rm "/tmp/${aux}.txt"
done
0
ответ дан 7 February 2015 в 17:03

Другие вопросы по тегам:

Похожие вопросы: