我试图将文件从machineB和machineC复制到machineA中,因为我在machineA上运行下面的shell脚本。
如果machineB中没有这些文件,那么它肯定在machineC中,所以我将首先尝试从machineB复制文件,如果它不在machineB中,那么我将尝试从machineC复制相同的文件。
我正在使用GNU并行库并行复制文件,而且它工作得很好。目前,我正在并行复制两个文件。
目前,我正在使用GNU并行复制PRIMARY_PARTITION文件夹中的PRIMARY文件,然后使用相同的GNU并行将SECONDARY_PARTITION文件复制到SECONDARY文件夹中,以便从现在起连续使用w.r.t PRIMARY和SECONDARY文件夹
下面是我的shell脚本,一切都很好-
#!/bin/bash
export PRIMARY=/test01/primary
export SECONDARY=/test02/secondary
readonly FILERS_LOCATION=(machineB machineC)
export FILERS_LOCATION_1=${FILERS_LOCATION[0]}
export FILERS_LOCATION_2=${FILERS_LOCATION[1]}
PRIMARY_PARTITION=(550 274 2 546 278) # this will have more file numbers
SECONDARY_PARTITION=(1643 1103 1372 1096 1369) # this will have more file numbers
export dir3=/testing/snapshot/20140103
# delete primary files first and then copy
find "$PRIMARY" -mindepth 1 -delete
do_CopyInPrimary() {
el=$1
scp david@$FILERS_LOCATION_1:$dir3/new_weekly_2014_"$el"_200003_5.data $PRIMARY/. || scp david@$FILERS_LOCATION_2:$dir3/new_weekly_2014_"$el"_200003_5.data $PRIMARY/.
}
export -f do_CopyInPrimary
parallel -j 2 do_CopyInPrimary ::: "${PRIMARY_PARTITION[@]}"
# delete secondary files first and then copy
find "$SECONDARY" -mindepth 1 -delete
do_CopyInSecondary() {
el=$1
scp david@$FILERS_LOCATION_1:$dir3/new_weekly_2014_"$el"_200003_5.data $SECONDARY/. || scp david@$FILERS_LOCATION_2:$dir3/new_weekly_2014_"$el"_200003_5.data $SECONDARY/.
}
export -f do_CopyInSecondary
parallel -j 2 do_CopyInSecondary ::: "${SECONDARY_PARTITION[@]}"问题陈述:-
是否有任何方法可以启动两个线程,一个使用与上面相同的设置在PRIMARY文件夹中复制文件,这意味着它将并行复制两个文件。第二个线程使用与上面相同的设置复制SECONDARY文件夹中的文件,它还应该同时复制两个文件吗?
这意味着它们应该同时复制PRIMARY和SECONDARY文件夹中的文件,而不是在完成PRIMARY文件夹之后复制文件,然后在SECONDARY文件夹中复制文件。
当前,一旦完成了PRIMARY文件夹文件,那么只有我尝试复制SECONDARY文件夹中的文件。
总之,我只需要启动两个线程,一个线程就能运行-
# delete primary files first and then copy
find "$PRIMARY" -mindepth 1 -delete
do_CopyInPrimary() {
el=$1
scp david@$FILERS_LOCATION_1:$dir3/new_weekly_2014_"$el"_200003_5.data $PRIMARY/. || scp david@$FILERS_LOCATION_2:$dir3/new_weekly_2014_"$el"_200003_5.data $PRIMARY/.
}
export -f do_CopyInPrimary
parallel -j 2 do_CopyInPrimary ::: "${PRIMARY_PARTITION[@]}"第二个线程会运行这个-
# delete secondary files first and then copy
find "$SECONDARY" -mindepth 1 -delete
do_CopyInSecondary() {
el=$1
scp david@$FILERS_LOCATION_1:$dir3/new_weekly_2014_"$el"_200003_5.data $SECONDARY/. || scp david@$FILERS_LOCATION_2:$dir3/new_weekly_2014_"$el"_200003_5.data $SECONDARY/.
}
export -f do_CopyInSecondary
parallel -j 2 do_CopyInSecondary ::: "${SECONDARY_PARTITION[@]}"一旦成功复制了所有文件,就应该回显消息,即复制所有文件。在java中,我知道如何启动两个线程,每个线程都在执行特定的任务,但不确定在bash脚本中这将如何工作?
我的主要任务是并行复制两个文件,同时使用PRIMARY文件夹中的GNU并行和SECONDARY文件夹?
在bash脚本中可以这样做吗?
发布于 2014-05-19 15:23:27
简单地使用&操作符启动另一个bash脚本在终端中运行,可能会在这里解决您的需求。
https://stackoverflow.com/questions/23741467
复制相似问题