记录在Linux服务器上,批量创建、移动、启动、提取,命名规范的相关计算文件的简单实现。适用情况在Linux下批量运行测试算例的简单实现(一)中有详细介绍,此处只对改进的代码做相应的更新,以为备忘。

1、批量创建、移动
创建shell脚本,例如FileCreater.sh,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/bin/bash
floderName=$1 #输入参数1,文件夹名称
dir_id_start=$2 #输入参数2,起始编号
dir_id_end=$3 #输入参数3,结束编号
submitName=submit
submitSuffix=.sh

while test $dir_id_start -le $dir_id_end
do
mkdir $floderName$dir_id_start
cp mesh_square.dat $floderName$dir_id_start/mesh.dat
cp verification_oscillation.erosion $floderName$dir_id_start/$floderName$dir_id_start.erosion
mv $submitName$dir_id_start$submitSuffix $floderName$dir_id_start
cd $floderName$dir_id_start
mkdir fluid
mkdir solid
chmod +x $submitName$dir_id_start$submitSuffix
cd ..
dir_id_start=`expr $dir_id_start + 1`
done

运行:./FileCreater.sh test 1 100
功能:将当前目录存在的100份计算输入参数文件submit1.sh, submit2.sh, ..., submit100.sh分配到100个文件夹(名称通过输入参数floderName定义,本例中为test1, test2, ..., test100)中,并将计算所需的主程序按计算参数文件进行编号后分配至对应的文件夹,并拷贝及创建相应的文件及文件夹,修改权限。

2、批量启动
创建shell脚本,例如ProcessStarter.sh,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/bin/bash
dir_name=$1 #输入参数1,文件夹名称
dir_id=$2 #输入参数2,起始编号
dir_id_end=$3 #输入参数3,结束编号

submitName=./submit
submitSuffix=.sh

while test $dir_id -le $dir_id_end
do
cd $dir_name$dir_id
nohup $submitName$dir_id$submitSuffix $dir_name$dir_id.erosion &
cd ..
dir_id=`expr $dir_id + 1`
done

运行:./ProcessStarter.sh test 1 100
功能:批量启动100份文件夹中的计算主程序test1.erosion, test2.erosion, ..., test100.erosion,运行方式:后台运行。

3、批量提取
创建shell脚本,例如ResultGatherer.sh,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#!/bin/bash
sourcePath=/home/hmliao/ #数据源路径
destinationPath=/home/hmliao/createFloder/ #数据目标路径
floderName=$1 #输入参数1,文件夹名称
floderStart=$2 #输入参数2,N个测试文件中需要提取的范围(开始)
floderEnd=$3 #输入参数3,N个测试文件中需要提取的范围(结束)
fluidStart=$4 #输入参数4,每个份测试文件中M份结果数据,需要提取的结果范围(开始)
fluidEnd=$5 #输入参数5,每个份测试文件中M份结果数据,需要提取的结果范围(结束)
fileName=fluid_0_
submitSuffix=.vtu

#创建目录,用于放置提取的结果
dir_id1=$floderStart
while test $dir_id1 -le $floderEnd
do
mkdir $destinationPath$floderName$dir_id1
dir_id1=`expr $dir_id1 + 1`
done

#提取结果至前述创建的目录
dir_id2=$floderStart
while test $dir_id2 -le $floderEnd
do
#Copy fluid files
fileId=$fluidStart
while test $fileId -le $fluidEnd
do
cp $sourcePath$1$dir_id2/fluid/$fileName$fileId$submitSuffix $destinationPath$1$dir_id2/
fileId=`expr $fileId + 1`
done
dir_id2=`expr $dir_id2 + 1`
done

运行:./ResultGatherer.sh Result 1 100 1 30
功能:如前所述,批量运行100份测试程序,对于一份测试,其测试过程中计算步数很多,需要在计算过程中即对计算结果(假设已计算得到30份结果)进行可视化分析,以判断是否有必要继续进行下去。因此需要将100个文件夹中,各自的30份文件,提取到一个独立的文件夹Result,然后将Result下载到本地机器进行分析。通过这个简单的脚本,可以方便的提取自己所需要的数据,数据的筛选及收集就是一条命令的事情,最后将结果数据下载即可分析,提高效率。