在ubuntu计算机中重命名命令的用法,用于重命名一组文件

时间:2018-11-06 17:39:06

标签: bash shell ubuntu scripting ubuntu-14.04

我有一个Shell脚本,用于重命名一个文件夹中的多个文件。它可以在rhel主机上运行,​​但在ubuntu14主机上会引发错误。

#!/usr/bin/env bash

SOME_NUMBER=1
rename _file_name.c _file_${SOME_NUMBER}.c path/of/file/*_file_name.c

我应该对代码进行哪些更改以使其在ubuntu14主机上工作?

EDIT-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 个答案:

答案 0 :(得分:2)

单引号可防止参数扩展。由于Perl和Shell语法在这方面是相似的,因此文字字符串s/\_file_name.c$/\_file_${SOME_NUMBER}.c/传递给Perl,在此试图扩展未定义的变量$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

请确保您的Shell脚本中的SOME_NUMBER的值实际上只是一个数字,或者至少是在扩展时会产生有效Perl表达式的值。