我在 2 个不同的目录中有很多转储文件,需要使用 rsync 上传,我想同时为每个转储文件运行 rsync 以节省时间。
转储文件:
Dir1:
- /u05/expdpdump/exppdb/dir1/NoTDE_CDB_FULL1_01.dmp
- /u05/expdpdump/exppdb/dir1/NoTDE_CDB_FULL1_02.dmp
- /u05/expdpdump/exppdb/dir1/NoTDE_CDB_FULL1_03.dmp
- /u05/expdpdump/exppdb/dir1/NoTDE_CDB_FULL1_04.dmp
Dir2:
- /u05/expdpdump/exppdb/dir2/NoTDE_CDB_FULL2_01.dmp
- /u05/expdpdump/exppdb/dir2/NoTDE_CDB_FULL2_02.dmp
- /u05/expdpdump/exppdb/dir2/NoTDE_CDB_FULL2_03.dmp
- /u05/expdpdump/exppdb/dir2/NoTDE_CDB_FULL2_04.dmp
以下 rsync 命令在后台对每个目录中的每个转储文件运行:
rclone sync /u05/expdpdump/exppdb/NoTDE_CDB_FULL_01.dmp NoTDE_Mig1:IC_dbbackup_config_datapump_xxxxxx
我设法获得了为每个文件运行 rsync 所需的输出,但是,我想跟踪每个文件的开始和结束时间以及在后台运行的 rsync 作业的总体运行时间。在 for 循环中使用time
将仅提供每个文件的经过时间,但是我还需要完成所有作业后开始和结束时间的总体经过时间
dumpdir1="/u05/expdpdump/exppdb/dir1"
for i in $dumpdir1/*.dmp
do
echo " time rclone sync $i NoTDE_Mig1:IC_dbbackup_config_datapump_v00rcfh_iad3p2 &"
done
dumpdir2="/u05/expdpdump/exppdb/dir2"
for i in $dumpdir2/*.dmp
do
echo " time rclone sync $i NoTDE_Mig1:IC_dbbackup_config_datapump_v00rcfh_iad3p2 &"
done```
答案1
像这样的东西:
# `time` will give the total time
time parallel -j0 --joblog mylog rclone sync {} NoTDE_Mig1:IC_dbbackup_config_datapump_v00rcfh_iad3p2 ::: /u05/expdpdump/exppdb/dir{1,2}/*.dmp
# the log contains the time per file
cat mylog
如果不并行运行所有命令,您可以获得更好的性能,具体取决于您的磁盘。您可以通过替换-j0
为 来将并行运行的作业数量限制为 5 -j5
。