使用 unix shell 脚本移动到另一个文件夹时更改文件名

Change filenames while moving to another folder using unix shell script

我的问题与移动到目标文件夹时替换文件名有关

echo "src_filename_final_array:::${src_filename_final_array[@]}"

显示以下内容

SRC1_VEX_V4_20190915.txt SRC1_VEX_V4_20190915.ctl

数组src_filename_final_array包含以上两个文件

已编写 mv 命令

mv "${src_filename_final_array[@]}" $src_file_InProcess_folder

是否可以在单个 mv 命令中将文件名 SRC1_VEX_V4_20190915.txt SRC1_VEX_V4_20190915.ctl 更改为 SRC1_VEX_20190915.txt SRC1_VEX_20190915.ctl

删除版本号可以是V4/v12/或任何起始V

有人可以建议最好的方法吗?

提前致谢。

此致, 普拉萨德·比拉哈利

您可以编写一个简单的脚本来遍历数组并更改每个文件名 如下图

src_filename_final_array=(SRC1_VEX_V4_20190915.txt SRC1_VEX_V4_20190915.ctl)

for i in "${arr[@]}"
do
   new_file=`echo "$i" | sed 's/V[0-9]_//g'`
   mv "$i" "$new_file"

done

下面是工作示例

[cloudera@quickstart sub1]$ ls -lrt
total 8
drwxrwxr-x 2 cloudera cloudera 4096 Oct 31 00:17 sub2
-rw-rw-r-- 1 cloudera cloudera  177 Oct 31 23:41 table_list.txt
-rw-rw-r-- 1 cloudera cloudera    0 Nov  3 23:30 SRC1_VEX_V4_20190915.txt
-rw-rw-r-- 1 cloudera cloudera    0 Nov  3 23:31 SRC1_VEX_V4_20190915.ctl

之后:

[cloudera@quickstart sub1]$ for i in "${arr[@]}"
> do
>    new_file=`echo "$i" | sed 's/V[0-9]_//g'`
>    mv "$i" "$new_file"
> 
> done
[cloudera@quickstart sub1]$ ls -lrt
total 8
drwxrwxr-x 2 cloudera cloudera 4096 Oct 31 00:17 sub2
-rw-rw-r-- 1 cloudera cloudera  177 Oct 31 23:41 table_list.txt
-rw-rw-r-- 1 cloudera cloudera    0 Nov  3 23:30 SRC1_VEX_20190915.txt
-rw-rw-r-- 1 cloudera cloudera    0 Nov  3 23:31 SRC1_VEX_20190915.ctl

作为替代方案,请考虑使用 'rename'(来自 perl 贡献包),它具有强大的 RE 功能,构建在 Perl 引擎上。

rename 's/V[0-9]_//g' SRC1_VEX_V4_20190915.txt SRC1_VEX_V4_20190915.ctl

请检查以确保您的 rename 代码正确。它是 rename 包的一部分,有时作为 file-rename

分发