提问人:Miss aya 提问时间:10/27/2023 最后编辑:Miss aya 更新时间:10/27/2023 访问量:68
用于多个复制 1 个文件并重命名为新名称的 Bash 脚本
Bash script for multiple copy 1 file and rename to new name
问:
我想创建 bash 脚本,用于将源目录中的 1 个文件多次复制到目标目录,并根据我的配置文件用特定的运行编号重命名它。
示例:源目录 --> /srv/test/ (有 3 种类型的文件)
- AB-测试-A1000000001_20230908005727724.tar
- 交流误差B1000000009_20230908005727724.tar
- AD-BUG-K8000000000_20230908005727724.tar
目标目录 --> /srv/rename
在我的配置文件内容中(从文件名复制;份数;新的运行编号;重命名 2 前面字符)
config_rename.txt
- AB-测试-A1000000001_20230908005727724.tar;2;A1000000001;12
- 交流错误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
答:
0赞
yanyong
10/27/2023
#1
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
评论