I am trying to copy files from machineB
and machineC
into machineA
as I am running my below shell script on machineA
.
If the files is not there in machineB
then it should be there in machineC
for sure so I will try copying the files from machineB
first, if it is not there in machineB
then I will try copying the same files from machineC
.
I am copying the files in parallel using GNU Parallel library and it is working fine. Currently I am copying two files in parallel.
Currently, I am copying the PRIMARY_PARTITION
files in PRIMARY
folder using GNU parallel and once that is done, then I copy the SECONDARY_PARTITION
files in SECONDARY
folder using same GNU parallel so it is sequential as of now w.r.t PRIMARY
and SECONDARY
folder
Below is my shell script and everything works fine -
#!/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[@]}"
Problem Statement:-
Is there any way I can launch two threads, one to copy files in PRIMARY
folder using the same setup as I have above, meaning it will copy two files in parallel. And second thread to copy the files in SECONDARY
folder using the same setup as I have above, it should also copy two files parallel simultaneously?
Meaning they should copy files in parallel both in PRIMARY
and SECONDARY
folder simultaneously not once PRIMARY
folder is done, then copy files in SECONDARY
folder.
Currently, once PRIMARY
folder file is done, then only I try copying the files in SECONDARY
folder.
In short, I just need to launch two threads one thread will run this -
# 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[@]}"
And second thread will run this -
# 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[@]}"
And once all the files are copied successfully, it should echo the message, that all the files are copied. In java, I know how to launch two threads and each thread is performing certain task but not sure how in bash shell script this will work?
My main task is to copy two files in parallel using GNU parallel in PRIMARY
folder and SECONDARY
folder at a same time?
Is this possible to do in bash shell script?