- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试将文件从 machineB
和 machineC
复制到 machineA
中,因为我在 machineA< 上运行下面的 shell 脚本
.
如果文件不在 machineB
中,那么它肯定在 machineC
中,所以我将尝试从 machineB
复制文件首先,如果它不在 machineB
中,那么我将尝试从 machineC
中复制相同的文件。
我正在使用 GNU Parallel 库并行复制文件并且工作正常。目前我正在并行复制两个文件。
目前,我正在使用 GNU parallel 将 PRIMARY_PARTITION
文件复制到 PRIMARY
文件夹中,完成后,我将复制 SECONDARY_PARTITION
文件在 SECONDARY
文件夹中使用相同的 GNU parallel 所以它是顺序的,因为现在 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 shell 脚本中这将如何工作?
我的主要任务是在 PRIMARY
文件夹和 SECONDARY
文件夹中同时使用 GNU parallel 并行复制两个文件?
这可以在 bash shell 脚本中完成吗?
最佳答案
使用 & 运算符简单地启动另一个 bash 脚本以在终端中运行可能会在这里解决您的需求
关于linux - 如何在 bash shell 脚本中启动两个线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23741467/
我是一名优秀的程序员,十分优秀!