微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Makefile 重写文件不捕获正则表达式

如何解决Makefile 重写文件不捕获正则表达式

我正在使用一个命令来重写文件,我想将它与 makefile 一起使用,但是 makefile 不起作用,很奇怪...

我解释了所有问题,以及解决它的步骤:

我有这个结构:

/var/www/project/src/assets/img/magazines/<language>/<number>/01.jpg
/var/www/project/src/assets/img/magazines/<language>/<number>/02.jpg
/var/www/project/src/assets/img/magazines/<language>/<number>/03.jpg
...

但是对于新杂志来说,上传图片的人有不受欢迎的前缀。 REV56_ESP-30.jpg。之前设置的杂志图片数我都得去掉。

所以我让这个命令执行到shell。

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\//' {} +

而且效果很好。

结果:

rename(/var/www/project/src/assets/img/magazines/es/88/REV88_ESP-01.jpg,/var/www/project/src/assets/img/magazines/es/88/01.jpg)
rename(/var/www/project/src/assets/img/magazines/es/88/REV88_ESP-02.jpg,/var/www/project/src/assets/img/magazines/es/88/02.jpg)

所以我对此很满意,但我想将此命令添加到 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\//' {} +

但是当我运行这个规则时:

root@server:/var/www/project# make 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\/\/\//' {} +
rename(/var/www/project/src/assets/img/magazines/es/82/REV82_ESP-26.jpg,/var/www/project/src/assets/img/magazines///26.jpg)
rename(/var/www/project/src/assets/img/magazines/es/82/REV82_ESP-12.jpg,/var/www/project/src/assets/img/magazines///12.jpg)
rename(/var/www/project/src/assets/img/magazines/es/82/REV82_ESP-14.jpg,/var/www/project/src/assets/img/magazines///14.jpg)
rename(/var/www/project/src/assets/img/magazines/es/82/REV82_ESP-35.jpg,/var/www/project/src/assets/img/magazines///35.jpg)

为什么既不捕捉数字也不捕捉语言?

有什么问题吗?我正在执行完全相同的行,为什么它有不同的结果?

解决方法

防止 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\//' {} +

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?