Как написать сценарий для автоматической оптимизации всех PNG в моей директории изображений MediaWiki?

У меня есть MediaWiki 1.25.2, установленный на моем 64-разрядном компьютере Debian 8.1 VirtualBox, и я хотел бы иметь возможность загружать файлы images/ из этой установки в DropBox. Будучи cheapskate, я пытаюсь свести к минимуму размер этой директории изображений, оптимизируя PNG, найденные в ней, с optipng , так что я не получаю DropBox, настолько полный, что мне нужно заплатить за большее количество хранения. Моя Wiki имеет в настоящее время 182 PNG, которые я загрузил в нее (вместе с более чем сто других, которые представляют собой миниатюры этих оригинальных PNG и SVG, которые у меня есть на моей Wiki), поэтому optipng -o7 <filename> на каждом из этих файлов вручную будет очень утомительно.

Поэтому я здесь спрашиваю, как я могу написать сценарий bash, который автоматически сделает это для меня. Теперь я знаю некоторые части головоломки, как это сделать, например, я знаю, что программа find может генерировать списки файлов с указанным расширением файла в указанном месте (например, при запуске sudo find . -type f -name "*.png" из каталога images/ который для меня находится в /var/lib/mediawiki/images , перечисляет все PNG в нем), но я не знаю, как использовать эту программу для создания текстового файла, содержащего все имена файлов относительно в этот каталог (например, f/f1/Frugalware_Linux_screenshot.png ). Я также не знаю, как получить optipng для оптимизации PNG, перечисленных в текстовом файле.

  • Найти шаблон между специальными символами
  • Как я могу отредактировать мой скрипт bash для учета пробелов?
  • распечатать определенную строку из нескольких файлов
  • Получение пользовательского ввода из сценария, используемого как stdin для сеанса SSH
  • Использование cut / awk / sed с двумя разными разделителями
  • Как передать несколько аргументов через ssh и использовать эти аргументы в сценарии ssh?
  • Как использовать расширенное значение переменной оболочки в имени другой переменной?
  • Найти файлы, для которых несколько вариантов этого имени файла существуют вместе в одном каталоге
  • 2 Solutions collect form web for “Как написать сценарий для автоматической оптимизации всех PNG в моей директории изображений MediaWiki?”

    Пытаться:

     for i in `find . -type f -name "*.png"` do optipng -o7 "$i" done 

    Не тестировал, но он должен работать так. Если вам нужно протестировать его, вы можете изменить строку optipng -o7 $i с помощью echo $i чтобы узнать, optipng -o7 $i ли вы правильный файл.

    просто используйте здесь:

     find (...your filters ...) -exec optipng -o7 '{}' + 

    обратите внимание, что + попытается использовать как можно больше результатов find качестве аргумента для optipng , что прекрасно, так как эта программа принимает несколько файлов в качестве аргументов. Обратите внимание, что + работает только в том случае, если это последний аргумент команды -exec . Альтернативный вариант

     find (...filters...) -exec optipng -o7 '{}' \; 

    Будет выполнять optipng один раз за результат и, следовательно, намного медленнее.

    Боковое примечание: {} в find означает имя файла, полученное в результате поиска, -exec позволит выполнить команду ececuting.

    Linux и Unix - лучшая ОС в мире.