为了节省备份磁盘空间,我希望“停止”可以轻松重新生成的数据文件,因此不需要备份。
目前,我正在使用UNIX的“并行”命令基本上将大型嵌套for循环拆分为多个核心,每个进程都处理不同的输入参数。
# PARALLEL COMMAND CALLING mothballer.sh WITH INPUT ARGUMENTS
time parallel -j +0 --max-procs 8 "./mothballer.sh {1} {2} {3} {4} {5}" ::: {date1,date2} ::: {exp1,exp2} ::: {2,4,8} ::: {16,32,64} ::: {1,2,3,4,5}
...解释命令行参数并将它们传递给以下脚本“motherballer.sh”:
# reading command line arguments
date=$1
experiment=$2
parameter1=$3
parameter2=$4
trial=$5
# paths to original directory and a mirror directory in the backup server
WORK_DIR=/$WORK_MACHINE/${date}/${experiment}/${parameter1}/${parameter2}/${trial}/results
BACKUP_DIR=/$BACKUP_SERVER/${date}/${experiment}/${parameter1}/${parameter2}/${trial}/results
# create the mirror directory in the backup server
mkdir -p $BACKUP_DIR
# do the backup ("rsync" is similar to "cp")
rsync -avP $WORK_DIR/*.csv $BACKUP_DIR
# run rsync again to verify it worked; "rm" old files.
有更好的方法吗?例如,使用“find”?
编辑: 此外,能够使用'*'通配符会很好,因为并非所有实验都具有相同的参数组合等(即目录深度相同但文件夹名称不同)。这是我目前的方法(上图)的最大限制。
答案 0 :(得分:2)
如果命令行不太长:
time parallel ./mothballer.sh ::: */*/*/*/*
在mothballer' $ {date} / $ {experiment} / $ {parameter1} / $ {parameter2} / $ {trial}'将合并为1美元。
如果深度不同(zsh或更新的bash):
shopt -s globstar
time parallel ./mothballer.sh ::: **/results
在mothballer' $ {date} / $ {experiment} / $ {parameter1} / $ {parameter2} / $ {trial} / results'将合并为1美元。