![从 2 个不同的目录并行运行多个文件的 Rsync,并查找每个文件和所有文件的运行时间](https://linux22.com/image/150704/%E4%BB%8E%202%20%E4%B8%AA%E4%B8%8D%E5%90%8C%E7%9A%84%E7%9B%AE%E5%BD%95%E5%B9%B6%E8%A1%8C%E8%BF%90%E8%A1%8C%E5%A4%9A%E4%B8%AA%E6%96%87%E4%BB%B6%E7%9A%84%20Rsync%EF%BC%8C%E5%B9%B6%E6%9F%A5%E6%89%BE%E6%AF%8F%E4%B8%AA%E6%96%87%E4%BB%B6%E5%92%8C%E6%89%80%E6%9C%89%E6%96%87%E4%BB%B6%E7%9A%84%E8%BF%90%E8%A1%8C%E6%97%B6%E9%97%B4.png)
我在 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
。