'parallel' 或 'find' 遍历目录? [bash]

'parallel' or 'find' to iterate over directories? [bash]

为了将space保存在我的备份盘上,我想"mothball"可以轻松重新生成的数据文件,因此不需要备份。

目前,我正在使用 UNIX 的 "parallel" 命令在多个内核上拆分一个大型嵌套 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=
experiment=
parameter1=
parameter2=
trial=

# 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"?


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

如果命令行不是太长:

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。