使用表达式|替换为前导“-”(连字符|减号)“重命名”

使用表达式|替换为前导“-”(连字符|减号)“重命名”

我有很多类似的文件xyz_123_foo.ext,我想将其添加-bar到末尾的文件名中以生成xyz_123_foo-bar.ext.我试过:

rename . -bar. xyz_*

结果是:

rename: invalid option -- 'b'

接下来是用法文本。然后我尝试了各种变化,'-bar'"-bar"没有成功。

我怎样才能rename接受-作为替换字符串的一部分?
或者另一个命令会更有效或更合适吗?

我的 shell 是 bash,我使用的renameutil-linuxSuSe Linux SLE12 上的 shell。

答案1

mmv非常适合像这样的任务。

mmv -n -- '*.ext' '#1-bar.ext'

或任何点扩展

mmv -n -- '*.*' '#1-bar.#2'

-n一旦您很高兴它正在做正确的事情,请将其删除。

答案2

假设您rename是该实用程序的 Perl 变体rename

rename 's/$/-bak/' xyz_*

它使用 Perl 表达式,通过替换(“行尾”锚点)简单地-bak在所有给定文件名的末尾插入。$

你也可以使用

rename '$_ .= "-bak"' xyz_*

它使用另一个 Perl 表达式将字符串附加-bak$_(Perl 中的“当前事物”,这里是文件名)。

对于 shell 循环解决方案:

for name in xyz_*; do
    mv -i "$name" "$name-bak"
done

答案3

假设我们正在讨论 PERL 扩展rename(而不是renamefrom util-linux)...

rename 's/.ext/-bar.ext/' xyz_123_foo.ext

结果将文件名更改为xyz_123_foo-bar.ext.

单引号内的部分是 PERL 正则表达式。文件名中的s替换为.假设这些文件位于您的主目录 ( )中,则可以将其与 结合起来。.ext-bar.extfind~

find ~ -type f -name '*.ext' -exec rename 's/.ext/-bar.ext/' {} +

答案4

当使用大多数 Linux 发行版上预安装的util-linux版本时,您可以在包含前导破折号的参数前面添加以转义它。这是默认行为。rename--getopt

rename '.' -- '-bar.' xyz_*

相关内容