'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。
为了将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。