'parallel'或'find'迭代目录? [庆典]

时间:2015-09-03 10:51:51

标签: performance find backup ubuntu-12.04 gnu-parallel

为了节省备份磁盘空间,我希望“停止”可以轻松重新生成的数据文件,因此不需要备份。

目前,我正在使用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”?

编辑: 此外,能够使用'*'通配符会很好,因为并非所有实验都具有相同的参数组合等(即目录深度相同但文件夹名称不同)。这是我目前的方法(上图)的最大限制。

1 个答案:

答案 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美元。