代码之家  ›  专栏  ›  技术社区  ›  Yash

rename命令在ubuntu机器中用于重命名一组文件

  •  0
  • Yash  · 技术社区  · 7 年前

    我有一个shell脚本用于重命名文件夹中的多个文件。它在rhel主机上工作,但在ubuntu14主机上抛出错误。

    #!/usr/bin/env bash
    
    SOME_NUMBER=1
    rename _file_name.c _file_${SOME_NUMBER}.c path/of/file/*_file_name.c
    

    编辑-1:

    为了在ubuntu机器上运行代码,我做了以下更改,它可以正常工作:

    rename 's/\_file_name.c$/\_file_1.c/' path/of/file/*_file_name.c
    

    但以下操作不起作用,我收到以下错误消息:

    rename 's/\_file_name.c$/\_file_${SOME_NUMBER}.c/' path/of/file/*_file_name.c
    

    错误消息:

    Global symbol "$SOME_NUMBER" requires explicit package name at (eval 1) line 1.
    Global symbol "$SOME_NUMBER" requires explicit package name at (eval 1) line 1.
    
    1 回复  |  直到 7 年前
        1
  •  2
  •   Barmar    7 年前

    单引号防止参数扩展。因为Perl和shell在这方面的语法相似,所以文本字符串 s/\_file_name.c$/\_file_${SOME_NUMBER}.c/ $SOME_NUMBER .

    请改用双引号:

    rename "s/\_file_name.c$/\_file_${SOME_NUMBER}.c/" path/of/file/*_file_name.c
    

    看到了吗 Difference between single and double quotes in Bash

    SOME_NUMBER 在shell中,脚本实际上只是一个数字,或者至少是一些在扩展时生成有效Perl表达式的东西。