ETA(1)
π ETA(1) β the eta manual, bestie edition π
okay so. you know how you're running some big chonky process and you're just staring at it like ποΈπποΈ with zero clue how much longer?? that's what eta is for. it's from the eta manual, and it is genuinely iconic.
β¨ NAME β¨
eta β calculate the eta of a running process by repeatedly inspecting its progress π΅οΈβοΈπ
πΈ SYNOPSIS πΈ
eta [OPTIONS] TARGET PROGRESS_COMMAND
π¦ DESCRIPTION π¦
eta prints the progress and the estimated time to completion, based on the PROGRESS_COMMAND you give it and the TARGET value. no cap. π
PROGRESS_COMMAND should be a command that prints the current progress of some running process. so like, if the running process is a file copy, a suitable progress command would be du -b some.file β¨
TARGET should be the target value β aka the value that represents 100% β for the progress command. for a file copy, the target value should be the size of the source file. simple as. π
so if you've got, say, this process running:
scp -r dir/ myserver:
you could monitor its progress and eta using:
eta "$(du -bs dir)" ssh myserver du -bs dir
it's similar to watch(1) in the sense that it executes the given command repeatedly, but instead of displaying the output of the command, it parses the output and displays the progress and eta. the way it justβ¦ reads the vibes and does math?? obsessed. π
see NOTES for further details. π
π OPTIONS π
options adjust the behavior and output of eta. let's get into it.
-s,--startVALUE|initialβ use VALUE as the starting value for the process (the value representing 0% progress). if you are, for example, appending a 1GB file onto an existing 1GB fileβ¦
cat new_1GB >> existing_1GB
β¦you useβ¦
eta --start 1G 2G du -b existing_1GB
β¦to avoid having the progress start at 50%. π
if you use initial, the first value returned by the progress command will be used as the start value. this could be useful if you don't know the original start value, or if you're only interested in the progress of the remaining process. π
the default starting value is 0.
-i,--intervalSECS β run the progress command every SECS seconds. (may not be used in conjunction with--cont.) β°-d,--downβ to be used when the value decreases during progress. for example, if a script processes files in a directory and removes them as they get processed, you could use the following to monitor the progress:
eta --down 0 "ls | wc -l"
since the starting value will rarely be 0 when using --down, the default for --start is changed to initial. π
-w,--widthCOLS β specifies the width of the output ofeta. if this option is not provided, the output will fill the width of the terminal, or, default to 80 columns if there's no TTY. π-c,--contβ instead of running the given command repeatedly,etawill let the command keep running, and read the progress continuously line by line. if the process to be monitored writes its progress to a log file, you could for example use something like
eta --cont 100 "tail -n1 -f program.log | grep Progress:"
(may not be used in conjunction with --interval.) π₯
-h,--helpβ prints a help message and exits. π«Ά
π EXAMPLES π
π Copying files
if you're copying a directory to a remote host using something like
scp -r dir/ server:
you can monitor the progress using
eta -i 10 "$(du -bs dir)" ssh server du -bs dir
π Growing number of files
if you're processing lots of files using something like
mogrify -resize 50% -path output-dir *.jpg
(resize all jpg images and store the smaller versions in output-dir.) you can use
eta $(ls *.jpg | wc -l) "ls output-dir/*.jpg | wc -l"
note that the number of files may reach the target value before the last file is fully processed. π
π§ Shrinking number of files
if you're processing files and removing them as they get processedβ¦
for f in *; do ./process.sh $f && rm $f; done
β¦you can monitor the progress using:
eta --down 0 "$(ls | wc -l)"
β Counting lines
you can use --cont and cat -n to continuously monitor progress based on the number of lines printed:
tar vcfz bkp.tgz dir/ | eta --cont $(find dir/ | wc -l) cat -n
πΈ The process prints progress in a log file
if your running process logs the progress to a file, you could do something like
eta --cont 100 "tail -n1 -f program.log | grep Progress:"
π The process prints progress on stdout
if you have a process that prints its progress on stdout:
$ ./my-script.sh
Progress: 1 out of 55...
Progress: 2 out of 55...
Progress: 3 out of 55...
β¦
you can use --cont and the command itself as argument to eta:
eta --cont 55 ./my-script.sh
or, if you're a UUOC fan:
./my-script.sh | eta --cont 55 cat
π EXIT STATUS π
0β command completed successfully β¨1β invalid command line arguments π2β execution of external command failed π3β could not find a number indicating progress in command output π
π NOTES π
when parsing the TARGET value and the --start argument, eta will look for the first digit and start parsing from there. the given values may have a suffix indicating a metric or binary magnitude. supported suffixes are k, m, g, t, ki, mi, gi and ti (representing 10^3, 10^6, 10^9, 10^12, 2^10, 2^20, 2^30 and 2^40 resp.) π’
all arguments following the TARGET value will be joined and used as the PROGRESS_COMMAND. that is, there's no need for double quotes here:
eta 5g du -b bigfile
if stdout is a file or pipe, eta will print a new line between each progress output, instead of a carriage return. if you want the new line behavior in the terminal, simply pipe the output through cat(1). π
eta will only look for the progress value in the first 1000 characters of the first line of output written by the progress command (unless --cont is provided). π
π AUTHOR π
written by Andreas Lundblad (andreas.lundblad@gmail.com). π«Ά
π REPORTING BUGS π
report bugs in the issue tracker at github: <https://github.com/aioobe/eta/issues> π
π₯ SEE ALSO π₯
watch(1), pv(1), progress(1) π
and that's the whole page, bestie!! this one's GNU, dated 09 February 2019, straight out of the eta manual. go forth and never stare at a progress bar-less terminal again. periodt. π
β¨
π¦ where this page comes from
- debian bookworm: eta 1.0.1-1 Β· GPL-3.0-only
- debian trixie: eta 1.0.1-1 Β· GPL-3.0-only
- nixpkgs unstable: eta 1.0.1-unstable-2026-01-04
- ubuntu jammy: eta 1.0.1-1 Β· GPL-3.0-only
- ubuntu noble: eta 1.0.1-1 Β· GPL-3.0-only
- ubuntu resolute: eta 1.0.1-1 Β· GPL-3.0-only
- ubuntu stonking: eta 1.0.1-1.1 Β· GPL-3.0-only
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms