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

Makefile中文件重命名命令无法捕获正则表达式问题排查

问题根源与解决办法

你碰到的这个坑其实是Makefile的一个常见特性:它会优先解析所有以$开头的字符,把它们当作自己的变量或位置参数。

你在Shell里正常工作的$1和$2,到了Makefile里就被当成了Make的变量——而你根本没定义过这些变量,所以Make展开后直接把它们替换成了空字符串。这就导致你的正则替换式里的/var/www/project/src/assets/img/magazines/$1/$2/变成了/var/www/project/src/assets/img/magazines///,最终输出的路径就全乱了。

解决方法:用$$转义$符号

要让$1和$2原封不动地传递给Shell里的rename命令,你需要在Makefile里把每个$换成两个$(也就是$$)。Make在解析的时候会把$$转换成单个$,这样到了Shell层面就变成了正则需要的捕获组引用。

修改后的Makefile规则如下:

magazines-rename-script-dry:
	find /var/www/project/src/assets/img/magazines/ -depth -exec rename -n 's//var/www/project/src/assets/img/magazines/([a-z]+)/([0-9]+).*-//var/www/project/src/assets/img/magazines/$$1/$$2//' {} +

验证效果

执行make magazines-rename-script-dry后,Make会把命令里的$$1展开成$1,$$2展开成$2,最终传递给rename的命令就和你在Shell里直接执行的完全一致,正则捕获组就能正常捕获语言标识和数字编号,输出正确的重命名结果了。

内容的提问来源于stack exchange,提问作者Marc Pont

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 09:47:35