【发布时间】:2019-10-02 01:34:10
【问题描述】:
我使用带有数字前缀的命名约定来跟踪一些文件。但我的 2 位数前缀用完了。所以,我想搬到011.abc 012.def,而不是11.abc 12.def。我已经有一些013.xxx 014.yyy。
在空目录中尝试:
touch 11.abc 12.def 013.xxx 014.yyy
ls -1 给出:
013.xxx
014.yyy
11.abc
12.def
尝试#1:
这应该匹配任何以 2 位开头的数字,而不是 3 位。
rename -n 's/^\d\d[^\d]/0$1/' *
现在我有点希望$1 能举办比赛,就像11,0$1 给我011。
没有这样的运气:
Use of uninitialized value $1 in concatenation (.) or string at (eval 2) line 1.
'11.abc' would be renamed to '0abc'
Use of uninitialized value $1 in concatenation (.) or string at (eval 2) line 1.
'12.def' would be renamed to '0def'
从积极的方面来说,它愿意离开 013 和 014。
试试#2 rename -n 's/^\d\d[^\d]/0/' *
'11.abc' would be renamed to '0abc'
'12.def' would be renamed to '0def'
由于这是基于正则表达式的,我可以以某种方式保存匹配组 11 和 12?
如果我不能使用重命名,我可能会编写一个快速的 Python 脚本。不想在上面循环使用mv。
而且,实际上,我的命名约定是 2-3 位数字后跟一个点,所以这也是一个很好的匹配。
rename -n 's/^\d\d\./<whatever needs to go here>/' *
不管怎样,我使用的是 Homebrew 版本的重命名,就像我在 Mac 上一样。
【问题讨论】:
-
尝试
rename -n 's/^(\d\d)[^\d]/0\1/'捕获组和反向引用 -
不走运。它说
\1 better written as $1 at (eval 2) line 1.。当我输入$1时,它并没有显示它做任何事情,所以它可能没有实现一些正则表达式的东西。 -
什么操作系统和版本?
-
尝试使用捕获组
-
@bishop macOS Sierra