我试图将文件从machineB
和machineC
复制到machineA
,因为我在machineA
上运行我的下面的shell脚本。如何在bash shell脚本中启动两个线程?
如果文件不存在在machineB
那么它应该有在machineC
肯定的,所以我会尝试从machineB
先复制文件,如果它不存在于machineB
然后我会尝试从machineC
复制相同的文件。
我使用GNU并行库并行复制文件,它工作正常。目前我正在并行复制两个文件。
目前,我使用的GNU平行复制PRIMARY_PARTITION
文件PRIMARY
文件夹,一旦做到这一点,那么我使用GNU平行一样的,所以它是连续的,截至目前WRT PRIMARY
和SECONDARY
文件夹
SECONDARY_PARTITION
文件复制
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 [email protected]$FILERS_LOCATION_1:$dir3/new_weekly_2014_"$el"_200003_5.data $PRIMARY/. || scp [email protected]$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 [email protected]$FILERS_LOCATION_1:$dir3/new_weekly_2014_"$el"_200003_5.data $SECONDARY/. || scp [email protected]$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 [email protected]$FILERS_LOCATION_1:$dir3/new_weekly_2014_"$el"_200003_5.data $PRIMARY/. || scp [email protected]$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 [email protected]$FILERS_LOCATION_1:$dir3/new_weekly_2014_"$el"_200003_5.data $SECONDARY/. || scp [email protected]$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脚本中工作?
我的主要任务是同时使用GNU parallel在PRIMARY
文件夹和SECONDARY
文件夹中同时复制两个文件?
这是可能在bash shell脚本中做的吗?
根据您的硬盘驱动器上的终端运行,你可能不希望在同一驱动器同时复制到两个不同的位置。这意味着你必须复制一点到一个点,然后找到另一个点写入它,然后再找到你的第一个点。 除非你必须同时写两个字,否则我会一个接一个地写。 阅读更多[here](http://superuser.com/questions/252959/which-is-faster-copying-everything-at-once-or-one-thing-at-a-time) –