Smi*_*yne 2 command-line scripts rename
我有一组文件,其名称包含字符*. 例如,文件名可以是***abcdef. 我想将此文件名更改为3_abcdef,用那里*的编号替换*。
我有一个脚本来重命名多个文件,但我不知道如何更改该脚本来完成上述任务。
这是我到目前为止的 wjat:
find drp/ -depth -name "*abc.tab" -exec rename 's/\abc.tab$/xyz.tab/' {} +
Run Code Online (Sandbox Code Playgroud)
我怎样才能让它适应这个任务?
您可以使用带有重命名的实际表达式。在这种情况下,我们匹配尽可能多的星号,然后用匹配的长度替换它:
rename 's/^[*]+/sprintf("%d_", length $&)/e' -vn *
Run Code Online (Sandbox Code Playgroud)
如果看起来正确,请删除该-n参数。这只是为了让您安全地测试它。
这是我的测试工具:
$ touch \*{,\*{,\*}}abc.tab
$ rename 's/^[*]+/sprintf("%d_", length $&)/e' -vn *
***abc.tab renamed as 3_abc.tab
**abc.tab renamed as 2_abc.tab
*abc.tab renamed as 1_abc.tab
Run Code Online (Sandbox Code Playgroud)
如果您还想进行其他重命名,可以将其链接到:
$ rename 's/^[*]+/sprintf("%d_", length $&)/e; s/abc/xyz/' -vn *
***abc.tab renamed as 3_xyz.tab
**abc.tab renamed as 2_xyz.tab
*abc.tab renamed as 1_xyz.tab
Run Code Online (Sandbox Code Playgroud)