Замена всех изображений в файле CSS строками в кодировке base64 из командной строки

В основном я пытаюсь написать одну умную строку команд, которая выводит строки в кодировке base64 вместо того, где раньше был путь в изображение. Итак:

background-image: url(path/to/my/image.png);

… превратится в:

background-image: url(data:image/png;base64,ABvR0…+tC==);

Я обычно превращаю изображение в его строку в кодировке base64 через:

openssl enc -base64 -in path/to/my/image.png

Который выводит base64… но с символами новой строки в нем. Это исправляется путем пропуска tr как:

openssl enc -base64 -in path/to/my/image.png | tr -d '\n'

, который просто выводит длинную строку в кодировке base64. Используя pbcopy (в Mac OS), который отправляется в буфер обмена, например:

openssl enc -base64 -in path/to/my/image.png | tr -d '\n' | pbcopy

Очень хорошо для специальной замены случайного изображения его представлением base64, но я бы хотел автоматизировать это для замены всех вхождений of url (путь / к / something.ext) в файле по их соответствующим строкам base64. Убедиться, что есть только фактические пути и нет данных-uris, здесь выходит за рамки:)

Я пытался заменить материал на sed , но я застрял в его ужасной документации. Найти вхождения шаблона url (…) в файле css не так уж сложно, но бит между скобками необходимо заменить выводом указанной выше команды, и я не знаю, находится ли он в все возможно. Итак, вот оно, помощь или несколько указателей (нужно ли мне также изучить awk?) были бы очень признательны! «Вы не можете сделать это без правильного сценария», конечно же:)

7
задан Matijs 28 March 2011 в 21:44
поделиться