/usr/bin/time --format output elapsed time in milliseconds

One possibility is to use the date command:

ts=$(date +%s%N) ; my_command ; tt=$((($(date +%s%N) - $ts)/1000000)) ; echo "Time taken: $tt milliseconds"

%N should return nanoseconds, and 1 millisecond is 1000000 nanosecond, hence by division would return the time taken to execute my_command in milliseconds.

NOTE that the %N is not supported on all systems, but most of them.


There are a couple of things getting confused in this thread.

Bash has a built-in time command which supports a TIMEFORMAT environment variable that will let you format the output. For details on this run man bash and search for TIMEFORMAT.

There is also a standard /usr/bin/time command-line utility which supports a TIME environment variable that will let you format the output (or you can use -f or --format on the command line). For details on this run man time and search for TIME.

If you want the number of seconds the command took to run you can either use the built-in bash command (which supports a maximum precision of three decimal places):

bash# export TIMEFORMAT="%3lR" 
bash# time find /etc > /dev/null
0m0.015s

Or you can use the command-line utility (which supports a maximum precision of two decimal places):

shell# export TIME="%E"
shell# /usr/bin/time find /opt/ > /dev/null
0:00.72

As mentioned above neither of these variables are used by anything else and are safe to change.


For convenience I made devnull's answer into a script (I named it millisecond-time).

#!/bin/bash
ts=$(date +%s%N) ; $@ ; tt=$((($(date +%s%N) - $ts)/1000000)) ; echo "Time taken: $tt milliseconds"

I put the script in /usr/local/bin.
Gave it execute rights chmod +x /usr/local/bin/millisecond-time.
Now I can use it like this: millisecond-time my_command

P.s. This would be a comment if I had the rep'.