É melhor você usar time
.
Por exemplo
TMP=$(mktemp)
time (scp yourfile user@otherhost:/path/ ) 2>$TMP
awk -F'[ ms]+' '/^real/ {print "copy time: "1000*$2"ms"}' $TMP
rm $TMP
Eu tenho um script no qual eu estou lendo o endereço IP de origem e destino de um arquivo csv e gravando o tempo em milissegundos que ele está tomando para copiar o arquivo da origem para o destino (usando scp). Abaixo está meu script.
#!/bin/bash
while IFS="," read f1 f2
do
echo "Source IP : $f1"
echo "Destination IP : $f2"
export sourceIP=$f1
export destIP=$(echo "$f2" | tr -d '\n')
ssh -t -t sjain@$f1 'bash -s' <<ENDSSH
#Start copying 100MB File
startTime=$(($(date '+%s%N')/1000000))
echo \$startTime
scp MB_100.txt sjain@$destIP:/home/sjain
endTime=$(($(date '+%s%N')/1000000))
echo \$endTime
printf 'Elapsed time in copying 33KB file: %s\n' \$((endTime-startTime))
#Write the stats to the file
echo $sourceIP','$destIP',33KB,'\$((endTime-startTime)) >> report.txt
exit
ENDSSH
#Write the stats to the file
#echo '10.234.0.9,10.234.0.19,33KB,'\$((endTime-startTime)) >> report.txt
done < ipaddress.csv
Resultado
[sjain@XYZ ~]$ #Start copying 100MB File
[sjain@XYZ ~]$ startTime=1394659673854
[sjain@XYZ ~]$ echo $startTime
1394659673854
[sjain@XYZ ~]$ scp MB_100.txt [email protected]:/home/sjain
MB_100.txt 100% 100MB 100.0MB/s 00:00
[sjain@XYZ ~]$ endTime=1394659673855
[sjain@XYZ ~]$ echo $endTime
1394659673855
ndTime-startTime)) D01 ~]$ printf 'Elapsed time in copying 33KB file: %s\n' $((e
Elapsed time in copying 33KB file: 1
[sjain@XYZ ~]$ #Write the stats to the file
Time)) >> report.txt01 ~]$ echo 10.Y.Y.Y','10.X.X.X',33KB,'$((endTime-start
[sjain@XYZ ~]$ exit
exit
Connection to 10.Y.Y.Y closed.
O problema que estou enfrentando agora, não está me devolvendo o tempo em milissegundos (eu acho), está dando em segundos.
Por favor, ajude a corrigir este problema.
Você pode usar o scp
no modo detalhado e pegar as estatísticas de tempo. Substitua sua linha scp
da seguinte forma:
scp -v src dest 2>&1 | grep 'Transferred' | awk '{print $(NF - 1) * 1000}'
Editar: isso pode não ser preciso ao milissegundo.
Com python, pode-se obter precisão no nível de microssegundo, por exemplo.
#!/usr/bin/env python
import subprocess
import datetime
a=datetime.datetime.now()
subprocess.call(["scp", "-r", "a-dir/", "[email protected]:~/"])
b=datetime.datetime.now()
print (b-a).microseconds
Tags linux command timestamps