重命名名称包含“*”的多个文件

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)

我怎样才能让它适应这个任务?

Oli*_*Oli 7

您可以使用带有重命名的实际表达式。在这种情况下,我们匹配尽可能多的星号,然后用匹配的长度替换它:

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)

  • 抱歉,删除 `-n` 参数。那是为了安全测试。 (5认同)