Shell 使用uglifycss生成输出文件时更改文件扩展名

Shell 使用uglifycss生成输出文件时更改文件扩展名,shell,find,uglifycss,Shell,Find,Uglifycss,我正在使用uglifycss npm包缩小项目输出目录中的所有CSS文件。我正在执行以下生成后脚本,通过添加*.min.CSS find dist/assets/css/ -type f -name "*.css" -exec uglifycss --output {}.min.css {} \; -exec rm {} \; 执行脚本之前的文件: 执行脚本后的文件: 我想从完整文件名路径中删除现有的.css,并向其追加.min.css。我尝试了几种解决方案,但未能达到

我正在使用uglifycss npm包缩小项目输出目录中的所有CSS文件。我正在执行以下生成后脚本,通过添加
*.min.CSS

find dist/assets/css/ -type f -name "*.css" -exec uglifycss --output {}.min.css {} \; -exec rm {} \;
执行脚本之前的文件:

执行脚本后的文件:

我想从完整文件名路径中删除现有的
.css
,并向其追加
.min.css
。我尝试了几种解决方案,但未能达到预期效果。我已经看过文件了,但什么也找不到。有什么方法可以从{}文件路径修剪扩展名吗?

找到答案并将其转换为您的需要,如下所示

find dist/assets/css/ -type f -name "*.css" -exec bash -c 'name="{}"; uglifycss --output "${name//css/min.css}" "$name"' \; -exec rm {} \;
找到答案并将其转化为您的需求

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

问题在于
-exec
,将
{}
替换为完整的文件名,并且无法直接从
{}
中删除扩展名。一种方法是使用shell操作

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
被添加回来。

问题在于
-exec
{/code>被替换为完整的文件名,没有直接的方法从
{
。一种方法是使用shell操作

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
被添加回来。

这会为找到的.css文件的每一次出现生成一个bash shell,如果文件名为例如
cssmain.css
这会为找到的.css文件的每一次出现生成一个bash shell,并且可能会执行以下操作:如果文件名用于例如
cssmain.css