我正在使用brew rename 重命名多个文件......
file-24.png => file.png
file-48.png => file@2x.png
file-72.png => file@3x.png
Run Code Online (Sandbox Code Playgroud)
第一个是成功的,
rename 's/-24//g' *
Run Code Online (Sandbox Code Playgroud)
第二个和第三个……
rename 's/-48/@2x/g' *
Run Code Online (Sandbox Code Playgroud)
并得到Possible unintended interpolation of @2 in string at (eval 2) line 1...
逃避是不行的..
rename 's/-48/\@2x/g' *
Run Code Online (Sandbox Code Playgroud)
也欢迎其他可能的方法来重命名多个文件,就像这种情况一样。
我不知道“ brew rename ”是什么,但如果它使用正常的正则表达式
's/pattern/q(@replacement)/e'
Run Code Online (Sandbox Code Playgroud)
这使用/e 修饰符将替换侧评估为代码,其中q() 运算符(单引号)用于插入文字字符。
另一种方法是使用\x40字符@
's/pattern/\x40replacement/'
Run Code Online (Sandbox Code Playgroud)
或者只是逃避它,\@在替换中使用。
这适用于只有一个角色需要处理的情况,就像这里一样。如果有更多内容,那么用q()(为此我们需要/e标志) 单引号整个内容会更容易。
忍不住要问——你确定要@在文件名中包含它吗?许多工具可以以各种方式解释该角色。例如,将该文件名粘贴在 Perl 脚本的变量中会导致无穷无尽的麻烦。为什么不简单一点file_at_2x.png呢?
这可能更奇怪,但如果您有很多文件,您可以使用以下命令重命名它们
's{ \-([0-9]+) }{ ($r = $1/24) > 1 && qq(_at_${r}x) || q() }ex'
Run Code Online (Sandbox Code Playgroud)
这会将数字捕获([0-9]+)到$1. 然后,它找到比率 ( $r = $1/24),如果是,>1则(&&短路)将其替换-number为_at_${r}x,否则 ( ||) 通过放置空字符串 来删除它q()。
我使用{}{}分隔符,以便可以/在内部使用,并}x允许内部有空格,以提高可读性。
请一如既往地使用您的实际文件(副本)仔细测试这一点。
| 归档时间: |
|
| 查看次数: |
618 次 |
| 最近记录: |