用于多个副本 1 文件并重命名为新名称的 Bash 脚本

问题描述 投票:0回答:1

我想创建 bash 脚本,将源目录中的 1 个文件复制到目标目录,并根据我的配置文件使用特定的运行号重命名它。

示例:源目录 --> /srv/test/ (有 3 种文件类型)

  • AB-TEST-A1000000001_20230908005727724.tar
  • 交流错误-B1000000009_20230908005727724.tar
  • AD-BUG-K8000000000_20230908005727724.tar

目标目录 --> /srv/rename

在我的配置文件内容中(从文件名复制;复制数量;新的运行号码;重命名2个前面的字符)

config_rename.txt

  • AB-TEST-A1000000001_20230908005727724.tar;2;A1000000001;12
  • AC-错误-B1000000009_20230908005727724.tar;3;B1000000009;YX

配置文件(config_rename.txt)的期望

目标目录 --> /srv/rename 此文件有 2 个副本 AB-TEST-A1000000001_20230908005727724.tar 并重命名它

  • 12-测试-A1000000001_20230908005727724.tar
  • 12-测试-A1000000002_20230908005727724.tar

目标目录 --> /srv/rename 此文件有 3 个副本 AC-ERROR-B1000000009_20230908005727724.tar 并重命名它

  • YX-错误-B1000000010_20230908005727724.tar
  • YX-错误-B1000000011_20230908005727724.tar
  • YX-错误-B1000000012_20230908005727724.tar

我尝试使用它,但不确定如何根据配置文件重命名文件

    cat $Conf_File | while read line
do
for file in "$Source_directory"/*; do 
 f="${file##*/}" 
[[ -f "$file" ]] && cp "$file" "$Destination_directory/$f"
done
done
bash loops copy
1个回答
0
投票

a.sh

#!/bin/bash
f=(`ls test`)  #file array
r=(`cat config_rename.txt`)  #rule array

for((i=0;i<${#f[*]};i++))
do
  f0=${f[i]#*-}  #example: TEST-A1000000001_20230908005727724.tar
  f1=${f0%-*}  #type of file, example: TEST
  f2=${f[i]##*_}  #example: 20230908005727724.tar
  for((j=0;j<${#r[*]};j++))
  do
    r_tmp=(${r[j]//;/ })  #temp array, example: r_tmp=(AB-TEST-A1000000001_20230908005727724.tar 2 A1000000001 12)
    f3=${r_tmp[2]%%[0-9]*}  #example: A
    f4=${r_tmp[2]##*[A-Za-z]}  #example: 1000000001
    if [[ ${f[i]} == ${r_tmp[0]} ]];then
      #while((r_tmp[1]--))
      for((k=0;k<${r_tmp[1]};k++))
      do
        f5=${f3}$((${f4}+k))
        cp test/${f[i]} rename/${r_tmp[3]}-${f1}-${f5}_${f2}
      done
    fi
  done
done

示例:

$ find
.
./test
./test/AD-BUG-K8000000000_20230908005727724.tar
./test/AC-ERROR-B1000000009_20230908005727724.tar
./test/AB-TEST-A1000000001_20230908005727724.tar
./rename
./a.sh
./config_rename.txt
$ bash a.sh && find
.
./test
./test/AD-BUG-K8000000000_20230908005727724.tar
./test/AC-ERROR-B1000000009_20230908005727724.tar
./test/AB-TEST-A1000000001_20230908005727724.tar
./rename
./rename/YX-ERROR-B1000000009_20230908005727724.tar
./rename/YX-ERROR-B1000000011_20230908005727724.tar
./rename/YX-ERROR-B1000000010_20230908005727724.tar
./rename/12-TEST-A1000000001_20230908005727724.tar
./rename/12-TEST-A1000000002_20230908005727724.tar
./a.sh
./config_rename.txt
$ cat config_rename.txt
AB-TEST-A1000000001_20230908005727724.tar;2;A1000000001;12
AC-ERROR-B1000000009_20230908005727724.tar;3;B1000000009;YX
© www.soinside.com 2019 - 2024. All rights reserved.