You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用uglifycss修改输出文件扩展名的技术咨询

解决UglifyCSS压缩后生成双重.css后缀的问题

你遇到的问题很典型——find命令里的{}会输出完整的文件名(包括.css后缀),直接追加.min.css自然会得到xxx.css.min.css这种不符合预期的结果。下面给你两种可靠的解决方案,都是通过替换原文件的扩展名而不是追加来生成目标文件:

方案1:使用Bash参数扩展(推荐)

利用Bash的内置参数扩展语法来快速移除.css后缀,再拼接.min.css:

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

关键解释:

  • ${0%.css}:这是Bash的参数扩展语法,意思是取变量$0(也就是find传入的当前文件名),移除末尾的.css后缀。比如style.css会变成style。
  • 再拼接.min.css,就得到了style.min.css,完美符合你的需求。
  • && rm "$0":只有当uglifycss执行成功时,才删除原文件,避免压缩失败误删源文件。

方案2:使用Sed替换扩展名

如果你更习惯用文本处理工具,也可以用sed来替换文件名的后缀:

find dist/assets/css/ -type f -name "*.css" | while read -r css_file; do
  min_file=$(echo "$css_file" | sed 's/\.css$/.min.css/')
  uglifycss --output "$min_file" "$css_file" && rm "$css_file"
done

关键解释:

  • sed 's/\.css$/.min.css/':用正则匹配文件名末尾的.css,替换成.min.css,同样能得到正确的目标文件名。
  • while read -r css_file:循环处理find输出的每个文件,引号包裹变量能兼容文件名含空格的场景。

这两种方案都能解决你的问题,方案1更高效(不需要额外启动sed进程),推荐优先使用。

内容的提问来源于stack exchange,提问作者Suhaib Janjua

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 21:22:30