Estou tentando copiar arquivos de machineB
e machineC
para machineA
enquanto estou executando meu script de shell abaixo em machineA
.
Se os arquivos não estiverem em machineB
, eles devem estar em machineC
, então tentarei copiar os arquivos de machineB
primeiro, se ele não estiver em machineB
, então tentarei copiando os mesmos arquivos de machineC
.
Eu estou copiando os arquivos em paralelo usando a biblioteca GNU Parallel e está funcionando bem. Atualmente estou copiando dois arquivos em paralelo.
Atualmente, estou copiando os arquivos PRIMARY_PARTITION
na pasta PRIMARY
usando o GNU paralelo e, uma vez feito isso, copio os arquivos SECONDARY_PARTITION
na pasta SECONDARY
usando o mesmo GNU paralelo para que ele seja sequencial a partir de agora wrt PRIMARY
e SECONDARY
pasta
Abaixo está o meu script de shell e tudo funciona bem -
#!/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[@]}"
Descrição do problema: -
Existe alguma maneira de lançar dois threads, um para copiar arquivos na pasta PRIMARY
usando a mesma configuração que eu acima, o que significa que ele copiará dois arquivos em paralelo. E segundo thread para copiar os arquivos na pasta SECONDARY
usando a mesma configuração que eu acima, ele também deve copiar dois arquivos paralelos simultaneamente?
Isso significa que eles devem copiar os arquivos em paralelo na pasta PRIMARY
e SECONDARY
simultaneamente, não depois que a pasta PRIMARY
estiver pronta e, em seguida, copiar os arquivos na pasta SECONDARY
.
Atualmente, quando o arquivo da pasta PRIMARY
é concluído, apenas tento copiar os arquivos na pasta SECONDARY
.
Em suma, eu só preciso lançar dois tópicos um segmento irá executar este -
# 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[@]}"
E o segundo thread executará isso -
# 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[@]}"
E assim que todos os arquivos forem copiados com sucesso, ele deverá ecoar a mensagem, que todos os arquivos são copiados. No java, eu sei como iniciar dois threads e cada thread está executando determinada tarefa, mas não sabe como no script de shell bash isso vai funcionar?
Minha principal tarefa é copiar dois arquivos em paralelo usando o GNU paralelo na pasta PRIMARY
e na pasta SECONDARY
ao mesmo tempo?
Isso é possível no script de shell bash?