Controlling download progress output in wget keeps long-running transfers understandable in interactive terminals and quiet in automation. A visible progress indicator exposes remaining time, current throughput, and stalled connections, while a hidden indicator prevents scheduled jobs from flooding log files with noise.

The wget client prints status lines, HTTP headers, and a progress indicator to standard error while streaming payload data directly to the destination file. Progress formatting is driven by the --progress option, which selects bar-style or dot-style indicators, and verbosity is tuned with flags such as --quiet, --no-verbose, and --verbose that add or remove protocol chatter around the transfer statistics.

Excessively chatty settings can generate multi‑megabyte logs from a single cron job, while overly quiet settings can hide HTTP errors and partial downloads behind a non‑zero exit code that no one checks. Typical Linux environments running wget 1.x allow safe experimentation in a shell, but updating shared defaults in /etc/wgetrc or system scripts changes behavior for every user and scheduled task, so changes benefit from being validated interactively before deployment.

Steps to show or hide download progress with wget:

  1. Run wget --version to confirm that the binary is installed and reachable on the current PATH.
    $ wget --version
    GNU Wget 1.21.2 built on linux-gnu.
    ##### snipped #####

    The version banner confirms that wget is available and lists build options that can affect HTTPS support and available progress styles.

  2. Download a test file with default settings to inspect the standard progress bar format.
    $ wget https://example.com/largefile.zip
    --2024-09-16 12:01:34--  https://example.com/largefile.zip
    Resolving example.com (example.com)... 93.184.216.34
    Connecting to example.com (example.com)|93.184.216.34|:443... connected.
    HTTP request sent, awaiting response... 200 OK
    Length: 128482304 (122M) [application/zip]
    Saving to: ‘largefile.zip’
    
    largefile.zip      100%[==================>] 122.52M  1.28MB/s    in 98s
    
    2024-09-16 12:03:12 (1.28 MB/s) - ‘largefile.zip’ saved [128482304/128482304]

    The default mode shows a single updating bar that reports percentage, transferred size, throughput, and elapsed time on one line.

  3. Switch to dot-style binary output with --progress=dot:binary to produce compact, line-oriented progress suitable for log files.
    $ wget --progress=dot:binary https://example.com/largefile.zip
    --2024-09-16 12:10:02--  https://example.com/largefile.zip
    Resolving example.com (example.com)... 93.184.216.34
    Connecting to example.com (example.com)|93.184.216.34|:443... connected.
    HTTP request sent, awaiting response... 200 OK
    Length: 128482304 (122M) [application/zip]
    Saving to: ‘largefile.zip’
    
    largefile.zip        2%[ ]   2.45M  2.45MB/s
    largefile.zip        8%[ ]   9.80M  3.20MB/s
    largefile.zip       50%[=====>         ]  61.26M  1.10MB/s
    largefile.zip      100%[================>] 122.52M  1.28MB/s

    Dot-style progress appends new lines during the transfer, which preserves a full history of the download rate when logs are rotated or archived.

  4. Use bar-style output with --progress=bar:force to keep an ASCII bar visible even when output is redirected.
    $ wget --progress=bar:force https://example.com/largefile.zip
    --2024-09-16 12:15:27--  https://example.com/largefile.zip
    Resolving example.com (example.com)... 93.184.216.34
    Connecting to example.com (example.com)|93.184.216.34|:443... connected.
    HTTP request sent, awaiting response... 200 OK
    Length: 128482304 (122M) [application/zip]
    Saving to: ‘largefile.zip’
    
    largefile.zip    42%[=========>          ]  52.26M  1.15MB/s
    largefile.zip   100%[====================>] 122.52M  1.30MB/s    in 94s
    
    2024-09-16 12:17:01 (1.30 MB/s) - ‘largefile.zip’ saved [128482304/128482304]

    The bar:force style is useful when progress must remain visible through pipes or when terminal detection behaves inconsistently under multiplexers like tmux or screen.

  5. Reduce chatter while still keeping a compact summary by enabling non-verbose mode with --no-verbose.
    $ wget --no-verbose https://example.com/largefile.zip
    2024-09-16 12:20:41 URL:https://example.com/largefile.zip [128482304/128482304] -> "largefile.zip" [1]

    Non-verbose mode hides intermediate progress details but prints a single summary line that includes timestamp, URL, size, and destination file.

  6. Hide progress and most status messages entirely by using quiet mode with --quiet and checking only the exit status.
    $ wget --quiet https://example.com/largefile.zip
    $ echo $?
    0

    Quiet mode suppresses visible errors and progress output, so failed downloads can be missed if exit codes are not checked or monitored.

  7. Configure a preferred default progress style for interactive use by setting the progress directive in the user configuration file /~/.wgetrc.
    ~/.wgetrc
    progress = dot:binary

    User-level settings in /~/.wgetrc override system defaults for that account and apply automatically without changing scripts or aliases.

  8. Verify that progress behavior matches expectations by running two transfers, one with explicit flags and one relying on configuration, and checking the resulting file.
    $ rm -f largefile.zip
    $ wget --progress=bar:force https://example.com/largefile.zip
    ##### snipped #####
    $ ls -lh largefile.zip
    -rw-r--r-- 1 user user 123M Sep 16 12:25 largefile.zip

    Successful tuning produces consistent progress output across runs, an exit code of 0 for completed downloads, and files on disk with the expected size and timestamp.

Discuss the article:

Comment anonymously. Login not required.