编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

FTP上传270万文件64G需要多长时间?用shell来算算

wxchong 2024-07-09 23:42:53 开源技术 14 ℃ 0 评论

昨天写了一篇《Execl轻松计算日期时间差一例》在execl表格中统计FTP传输所用时间,其开始时间是从FTP服务器上查看目录创建的时间,如果在服务器上统计那就跟结束时间一样,直接从lftp日志中来获取(这里的时间跟FTP服务器上取到的时间略有差异,一方面可能因为服务器时间不同步,另一方面开始传输和创建文件夹时间也不可能同步),获取后使用shell计算一下时间差。

先查看一下有多少条传输记录:272万多

一、获取开始时间:

grep "2016-10" .lftp/transfer_log | head -n 1 | cut -d ' ' -f1,2

使用grep在 文件【lftp/transfer_log】中搜索【2016-10】,然后取第一行,然后使用cut命令使用空格分隔取第1、2部分得到开始时间,例如:

[root@192.168.10.5 ~]#grep "2016-10" .lftp/transfer_log | head -n 1 | cut -d ' ' -f1,2

2016-10-19 19:41:47

二、获取结束时间:

前文也有提到:这里使用tac命令

[root@192.168.10.5 ~]#tac .lftp/transfer_log | head -n 1 | cut -d ' ' -f1,2

2016-10-24 00:40:24

三、计算时间差:

开始时间转换为时间戳:即自1970-01-01 08:00:00以来经过的秒数。(有的机器是1970-01-01 00:00:00,因为时区不一样,execl中是1900-1-1 00:00:00)

当前机器:date +%s -d "1970-01-01 08:00:01"命令执行的结果是1;

date +%s -d "2016-10-19 19:41:47"

1476877307

结束时间转换为时间戳

1477240824

结束时间戳-开始时间戳=1477240824-1476877307=363517

即时间差是363517秒,6058.6分,100.9小时,4.2天;

四、shell脚本:

#!/bin/bash

#author: Chuang

#date: 2016-10-29

end_time=$(tac /root/.lftp/transfer_log | head -n 1 | cut -d ' ' -f1,2)

start_time=$(grep "2016-10" /root/.lftp/transfer_log | head -n 1 | cut -d ' ' -f1,2)

time1=$(date +%s -d "$end_time")

time2=$(date +%s -d "$start_time")

time=$(($time1-$time2))

d=$(($time/86400))

h=$((($time%86400)/3600))

m=$(((($time%86400)%3600)/60))

s=$(((($time%86400)%3600)%60))

echo "Total time: $d days $h hours $m minutes $s seconds"

执行结果如下:





结果某服务器,272万文件64G上传用时约:4天4小时58分37秒;

总结】shell写的也不是很多,当前脚本只是功能的实现,如果有更好的方法欢迎指教。

  1. date +%s -d:+%s

  2. 使用$( )引用其他命令执行的结果;

  3. 使用$(())进行整数运算,除法、取余数;

  4. 8400即一天的秒数:24*60*60;

  5. 天数使用除法计算,小时取余后再除以3600秒,依次类推。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表