Измените расширение файла при создании выходного файла с помощью uglifycss

Я использую пакет uglifycss npm для минимизации всех файлов CSS из выходного каталога проекта. Я выполняю следующий сценарий после сборки, чтобы минимизировать содержимое файлов CSS и переименовать файлы, добавив*.min.css

find dist/assets/css/ -type f -name "*.css" -exec uglifycss --output {}.min.css {} \; -exec rm {} \;

Файлы перед выполнением скрипта:

Файлы после выполнения скрипта:

Я хочу удалить существующие.cssиз полного пути к имени файла и добавить.min.cssк нему. Я пробовал несколько решений, но не смог добиться ожидаемого результата. Я просмотрел документы uglifycss, но ничего не нашел. Есть ли способ обрезать расширение по пути к файлу {}?

2 ответа

Решение

Проблема с -exec, то {} заменяется полным именем файла, и нет прямого способа удалить расширение из {}. Один из способов - использовать манипуляции с оболочкой

find dist/assets/css/ -type f -name "*.css" -exec sh -c '
    for file ; do
        uglifycss --output "${file%.css}.min.css" "$file"
        rm -- "$file"
    done
' _ {} +

Уловка заключается в расширении параметров ${file%.css}.min.css, расширение .css удаляется и часть .min.css добавлен обратно.

Нашел здесь ответ и преобразовал его в соответствии со своими потребностями, как это

find dist/assets/css/ -type f -name "*.css" -exec bash -c 'name="{}"; uglifycss --output "${name//css/min.css}" "$name"' \; -exec rm {} \;
Другие вопросы по тегам