我正在尝试将文件从machineB
和machineC
复制到machineA
,因为我正在machineA
上运行我的下面的shell脚本。
如果文件不在machineB
中,那么它应该在machineC
中确保存在,所以我会首先尝试从machineB
复制文件,如果machineB
中没有{1}}然后我会尝试从machineC
复制相同的文件。
我使用GNU Parallel库并行复制文件,它工作正常。目前我正在并行复制两个文件。
目前,我正在使用GNU parallel复制PRIMARY_PARTITION
文件夹中的PRIMARY
文件,一旦完成,我将SECONDARY_PARTITION
文件复制到SECONDARY
文件夹中GNU并行,因此它现在是顺序的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 shell脚本中这将如何工作?
我的主要任务是同时使用PRIMARY
文件夹和SECONDARY
文件夹中的GNU parallel并行复制两个文件?
这可以在bash shell脚本中执行吗?
答案 0 :(得分:1)
只需启动另一个bash脚本即可在终端中使用&运营商可能会在这里解决您的需求