Пакетное преобразование изображений из одного формата в другой с сохранением структуры каталогов и удалением оригиналов

Я рассмотрел этот вопрос , и, хотя он работает, есть несколько вопросов:

  1. Все преобразованные изображения помещаются в каталог, из которого вызывается команда.
  2. Исходные изображения сохраняются.

Мне нужно конвертировать около 70 000 .tif и .jpgs в .pngs. Очень важно, чтобы файлы при конвертации помещались в их обычные каталоги.

В конце я могу сделать пакетную запись .tff / .jpg, если это лучший способ удаления старых файлов.

1
задан 13 April 2017 в 15:24

2 ответа

for f in $(find . -iname "*.jpg" -type f) ;
    do
    convert $f $(dirname $f)/$(basename -s .jpg $f).png ;
    done
  • find . -iname "*.jpg" -type f: поиск файла, заканчивающегося на «.jpg» без учета регистра
  • $(dirname $f): относительный путь к папке, содержащей файл $ f
  • $(basename -s .jpg $f): имя файла без суффикса ".jpg"

В старом Ubuntu базовое имя может нуждаться в запуске другим способом:

basename $f .jpg

Convert является частью imagemagick (As см. Пакетная обработка изображений tif: преобразование .tif в .jpeg ) для установки

sudo apt-get install imagemagick
0
ответ дан 13 April 2017 в 15:24
  • 1
    Но только с LANG=C. Моя немецкая система говорит inet Adresse;) – A.B. 7 July 2015 в 21:27

Прекрасно работает и с именами файлов с пробелами.

Чтобы удалить оригиналы:

SAVEIFS=$IFS; IFS= 

Чтобы сохранить оригиналы: удалите < ; rm "$ f"> part

SAVEIFS=$IFS; IFS=\n'
for f in $(find . -iname "*.jpg" -type f); do
    convert "$f" "${f%.*}.png"
done
IFS=$SAVEIFS
\n' for f in $(find . -iname "*.jpg" -type f); do convert "$f" "${f%.*}.png"; rm "$f" done IFS=$SAVEIFS

Чтобы сохранить оригиналы: удалите < ; rm "$ f"> part

SAVEIFS=$IFS; IFS=\n'
for f in $(find . -iname "*.jpg" -type f); do
    convert "$f" "${f%.*}.png"
done
IFS=$SAVEIFS
0
ответ дан 13 April 2017 в 15:24

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

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