NCDU(1)

NAME
ncdu - NCurses Disk Usage

SYNOPSIS
ncdu [-f file] [-o file] [-O file] [-e, --extended, --no-extended] [--ignore-config] [-x, --one-file-system, --cross-file-system] [--exclude pattern] [-X, --exclude-from file] [--include-caches, --exclude-caches] [-L, --follow-symlinks, --no-follow-symlinks] [--include-kernfs, --exclude-kernfs] [-t, --threads num] [-c, --compress, --no-compress] [--compress-level num] [--export-block-size num] [-0, -1, -2] [-q, --slow-ui-updates, --fast-ui-updates] [--enable-shell, --disable-shell] [--enable-delete, --disable-delete] [--enable-refresh, --disable-refresh] [-r] [--si, --no-si] [--disk-usage, --apparent-size] [--show-hidden, --hide-hidden] [--show-itemcount, --hide-itemcount] [--show-mtime, --hide-mtime] [--show-graph, --hide-graph] [--show-percent, --hide-percent] [--graph-style hash | half-block | eighth-block] [--shared-column off | shared | unique] [--sort column] [--enable-natsort, --disable-natsort] [--group-directories-first, --no-group-directories-first] [--confirm-quit, --no-confirm-quit] [--confirm-delete, --no-confirm-delete] [--delete-command command] [--color off | dark | dark-bg] [path]
ncdu [-h, --help]
ncdu [-v, -V, --version]

DESCRIPTION
ncdu (NCurses Disk Usage) is an interactive curses-based version of the well-known du(1), and provides a fast way to see what directories are using your disk space.

OPTIONS

  Mode Selection

-h, --help
    Print a short help message and quit.

-v, -V, --version
    Print version and quit.

-f file
    Load the given file, which has earlier been created with the -o or -O flag. If file is equivalent to '-', the file is read from standard input. Reading from standard input is only supported for the JSON format.

    For the sake of preventing a screw-up, the current version of ncdu will assume that the directory information in the imported file does not represent the filesystem on which the file is being imported. That is, the refresh, file deletion and shell spawning options in the browser will be disabled.

dir Scan the given directory.

-o file
    Export the directory tree in JSON format to file instead of opening the browser interface. If file is '-', the data is written to standard output. See the examples section below for some handy use cases.

    Be warned that the exported data may grow quite large when exporting a directory with many files. 10.000 files will get you an export in the order of 600 to 700 KiB uncompressed, or a little over 100 KiB when compressed with gzip. This scales linearly, so be prepared to handle a few tens of megabytes when dealing with millions of files.

    Consider enabling -c to output Zstandard-compressed JSON, which can significantly reduce size of the exported data.

    When running a multi-threaded scan or when scanning a directory tree that may not fit in memory, consider using -O instead.

-O file
    Export the directory tree in binary format to file instead of opening the browser interface. If file is '-', the data is written to standard output. The binary format has built-in compression, supports low-memory multi-threaded export (in combination with -t) and can be browsed without importing the entire directory tree into memory.

-e, --extended, --no-extended
    Enable/disable extended information mode. This will, in addition to the usual file information, also read the ownership, permissions and last modification time for each file. This will result in higher memory usage (by roughly ~30%) and in a larger output file when exporting.

    When using the file export/import function, this flag should be added both when exporting (to make sure the information is added to the export) and when importing (to read this extra information in memory). This flag has no effect when importing a file that has been exported without the extended information.

    This enables viewing and sorting by the latest child mtime, or modified time, using 'm' and 'M', respectively.

--ignore-config
    Do not attempt to load any configuration files.

  Scan Options
These options affect the scanning progress, they have no effect when importing directory information from a file.

-x, --one-file-system
    Do not cross filesystem boundaries, i.e. only count files and directories on the same filesystem as the directory being scanned.

--cross-file-system
    Do cross filesystem boundaries. This is the default, but can be specified to overrule a previously configured -x.

--exclude pattern
    Exclude files that match pattern. The files are still displayed by default, but are not counted towards the disk usage statistics. This argument can be added multiple times to add more patterns.

-X, --exclude-from file
    Exclude files that match any pattern in file. Patterns should be separated by a newline.

--include-caches, --exclude-caches
    Include (default) or exclude directories containing CACHEDIR.TAG. Excluded cache directories are still displayed, but their contents will not be scanned or counted towards the disk usage statistics. https://bford.info/cachedir/

-L, --follow-symlinks, --no-follow-symlinks
    Follow (or not) symlinks and count the size of the file they point to. This option does not follow symlinks to directories and will cause each symlinked file to count as a unique file. This is different from how hard links are handled. The exact counting behavior of this flag is subject to change in the future.

--include-kernfs, --exclude-kernfs
    (Linux only) Include (default) or exclude Linux pseudo filesystems such as /proc (procfs) and /sys (sysfs).

    The complete list of currently known pseudo filesystems is: binfmt, bpf, cgroup, cgroup2, debug, devpts, proc, pstore, security, selinux, sys, trace.

-t, --threads num
    Number of threads to use when scanning the filesystem, defaults to 1.

    In single-threaded mode, the JSON export (see -o) can operate with very little memory, but in multi-threaded mode the entire directory tree is first constructed in memory and written out after the filesystem scan has completed, This causes a delay in output and requires significantly more memory for large directory trees. The binary format (see -O) does not have this problem and supports efficient exporting with any number of threads.

  Export Options
These options affect behavior when exporting to file with the -o or -O options.

-c, --compress, --no-compress
    Enable or disable Zstandard compression when exporting to JSON (see -o).

--compress-level num
    Set the Zstandard compression level when using -O or -c. Valid values are 1 (fastest) to 19 (slowest). Defaults to 4.

--export-block-size num
    Set the block size, in kibibytes, for the binary export format (see -O). Larger blocks require more memory but result in better compression efficiency. This option can be combined with a higher --compress-level for even better compression.

    Accepted values are between 4 and 16000. The defaults is to start at 64 KiB and then gradually increase the block size for large exports.

  Interface Options

-0  Don't give any feedback while scanning a directory or importing a file, except when a fatal error occurs. Ncurses will not be initialized until the scan is complete. When exporting the data with -o, ncurses will not be initialized at all. This option is the default when exporting to standard output.

-1  Write progress information to the terminal, but don't open a full-screen ncurses interface. This option is the default when exporting to a file.

    In some cases, the ncurses browser interface which you'll see after the scan/import is complete may look garbled when using this option. If you're not exporting to a file, -2 is usually a better choice.

-2  Show a full-screen ncurses interface while scanning a directory or importing a file. This is the only interface that provides feedback on any non-fatal errors while scanning.

-q, --slow-ui-updates, --fast-ui-updates
    Change the UI update interval while scanning or importing. ncdu updates the screen 10 times a second by default (with --fast-ui-updates ), this can be decreased to once every 2 seconds with -q or --slow-ui-updates. This option can be used to save bandwidth over remote connections. This option has no effect in combination with -0.

--enable-shell, --disable-shell
    Enable or disable shell spawning from the file browser. This feature is enabled by default when scanning a live directory and disabled when importing from file.

--enable-delete, --disable-delete
    Enable or disable the built-in file deletion feature. This feature is enabled by default when scanning a live directory and disabled when importing from file. Explicitly disabling the deletion feature can work as a safeguard to prevent accidental data loss.

--enable-refresh, --disable-refresh
    Enable or disable directory refreshing from the file browser. This feature is enabled by default when scanning a live directory and disabled when importing from file.

-r  Read-only mode. When given once, this is an alias for --disable-delete, when given twice it will also add --disable-shell, thus ensuring that there is no way to modify the file system from within ncdu.

--si, --no-si
    List sizes using base 10 prefixes, that is, powers of 1000 (kB, MB, etc), as defined in the International System of Units (SI), instead of the usual base 2 prefixes (KiB, MiB, etc).

--disk-usage, --apparent-size
    Select whether to display disk usage (default) or apparent sizes. Can also be toggled in the file browser with the 'a' key.

--show-hidden, --hide-hidden
    Show (default) or hide "hidden" and excluded files. Can also be toggled in the file browser with the 'e' key.

--show-itemcount, --hide-itemcount
    Show or hide (default) the item counts column. Can also be toggled in the file browser with the 'c' key.

--show-mtime, --hide-mtime
    Show or hide (default) the last modification time column. Can also be toggled in the file browser with the 'm' key. This option is ignored when not in extended mode, see -e.

--show-graph, --hide-graph
    Show (default) or hide the relative size bar column. Can also be toggled in the file browser with the 'g' key.

--show-percent, --hide-percent
    Show (default) or hide the relative size percent column. Can also be toggled in the file browser with the 'g' key.

--graph-style hash | half-block | eighth-block
    Change the way that the relative size bar column is drawn. Recognized values are hash to draw ASCII '#' characters (default and most portable), half-block to use half-block drawing characters or eighth-block to use eighth-block drawing characters. Eighth-block characters are the most precise but may not render correctly in all terminals.

--shared-column off | shared | unique
    Set to off to disable the shared size column for directories, shared (default) to display shared directory sizes as a separate column or unique to display unique directory sizes as a separate column. These options can also be cycled through in the file browser with the 'u' key.

--sort column
    Change the default column to sort on. Accepted values are disk-usage (the default), name, apparent-size, itemcount or mtime. The latter only makes sense in extended mode, see -e.

    The column name can be suffixed with -asc or -desc to change the order to ascending or descending, respectively. For example, --sort=name-desc to sort by name in descending order.

--enable-natsort, --disable-natsort
    Enable (default) or disable natural sort when sorting by file name.

--group-directories-first, --no-group-directories-first
    Sort (or not) directories before files.

--confirm-quit, --no-confirm-quit
    Require a confirmation before quitting ncdu. Can be helpful when you accidentally press 'q' during or after a very long scan.

--confirm-delete, --no-confirm-delete
    Require a confirmation before deleting a file or directory. Enabled by default, but can be disabled if you're absolutely sure you won't accidentally press 'd'.

--delete-command command
    When set to a non-empty string, replace the built-in file deletion feature with a custom shell command.

    The absolute path of the item to be deleted is appended to the given command and the result is evaluated in a shell. The command is run from the same directory that ncdu itself was started in. The NCDU_DELETE_PATH environment variable is set to the absolute path of the item to be deleted and NCDU_LEVEL is set in the same fashion as when spawning a shell from within ncdu.

    After command completion, the in-memory view of the selected item is refreshed and directory sizes are adjusted as necessary. This is not a full refresh of the complete directory tree, so if the item has been renamed or moved to another directory, it's new location is not automatically picked up.

    For example, to use rm(1) interactive mode to prompt before each deletion:
        ncdu --no-confirm-delete --delete-command 'rm -ri --'
    Or to move files to trash:
        ncdu --delete-command 'gio trash --'

--color off | dark | dark-bg
    Set the color scheme. The following schemes are recognized: off to disable colors, dark for a color scheme intended for dark backgrounds and dark-bg for a variation of the dark color scheme that also works in terminals with a light background.

    The default is off.

CONFIGURATION
ncdu can be configured by placing command-line options in /etc/ncdu.conf or $HOME/.config/ncdu/config. If both files exist, the system configuration will be loaded before the user configuration, allowing users to override options set in the system configuration. Options given on the command line will override options set in the configuration files. The files will not be read at all when --ignore-config is given on the command line.

The configuration file format is simply one command line option per line. Lines starting with '#' are ignored. A line can be prefixed with '@' to suppress errors while parsing the option. Example configuration file:

    # Always enable extended mode
    -e
    # Disable file deletion
    --disable-delete
    # Exclude .git directories
    --exclude .git
    # Read excludes from ~/.ncduexcludes, ignore error if the file does not exist
    @--exclude-from ~/.ncduexcludes

KEYS

?   Open help + keys + about screen

up, down, j, k
    Cycle through the items

right, enter, l
    Open selected directory

left, <, h
    Go to parent directory

n   Order by filename (press again for descending order)

s   Order by filesize (press again for descending order)

C   Order by number of items (press again for descending order)

a   Toggle between showing disk usage and showing apparent size.

M   Order by latest child mtime, or modified time (press again for descending order). Requires the -e flag.

d   Delete the selected file or directory. An error message will be shown when the contents of the directory do not match or do not exist anymore on the filesystem.

t   Toggle dirs before files when sorting.

g   Toggle between showing percentage, graph, both, or none. Percentage is relative to the size of the current directory, graph is relative to the largest item in the current directory.

u   Toggle display of the shared / unique size column for directories that share hard links. This column is only visible if the current listing contains directories with shared hard links.

c   Toggle display of child item counts.

m   Toggle display of latest child mtime, or modified time. Requires the -e flag.

e   Show/hide 'hidden' or 'excluded' files and directories. Be aware that even if you can't see the hidden files and directories, they are still there and they are still included in the directory sizes. If you suspect that the totals shown at the bottom of the screen are not correct, make sure you haven't enabled this option.

i   Show information about the current selected item.

r   Refresh/recalculate the current directory.

b   Spawn shell in current directory.

    ncdu determines your preferred shell from the NCDU_SHELL or SHELL environment variable (in that order), or calls /bin/sh if neither are set. This allows you to also configure another command to be run when he 'b' key is pressed. For example, to spawn the vifm(1) file manager instead of a shell, run ncdu as follows:
        NCDU_SHELL=vifm ncdu
    The NCDU_LEVEL environment variable is set or incremented before spawning the shell, allowing you to detect if your shell is running from within ncdu. This can be useful to avoid nesting multiple instances, although ncdu itself does not (currently) warn about or prevent this situation.

q   Quit

FILE FLAGS
Entries in the browser interface may be prefixed by a one-character flag. These flags have the following meaning:

!   An error occurred while reading this directory.

.   An error occurred while reading a subdirectory, so the indicated size may not be correct.

<   File or directory is excluded from the statistics by using exclude patterns.

>   Directory is on another filesystem.

^   Directory is excluded from the statistics due to being a Linux pseudo filesystem.

@   This is neither a file nor a folder (symlink, socket, ...).

H   Same file was already counted (hard link).

e   Empty directory.

EXAMPLES
To scan and browse the directory you're currently in, all you need is a simple:
    ncdu
To scan a full filesystem, for example your root filesystem, you'll want to use -x:
    ncdu -x /

Since scanning a large directory may take a while, you can scan a directory and export the results for later viewing:

    ncdu -1xO export.ncdu /
    # ...some time later:
    ncdu -f export.ncdu

To export from a cron job, make sure to replace -1 with -0 to suppress unnecessary progress output.

You can also export a directory and browse it once scanning is done:
    ncdu -co- | tee export.json.zst | ./ncdu -f-

To scan a system remotely, but browse through the files locally:
    ssh user@system ncdu -co- / | ./ncdu -f-
Remote scanning and local viewing has two major advantages when compared to running ncdu directly on the remote system: You can browse through the scanned directory on the local system without any network latency, and ncdu does not keep the entire directory structure in memory when exporting, so this won't consume much memory on the remote system.

SEE ALSO
du(1), tree(1).

ncdu has a website: https://dev.yorhel.nl/ncdu

AUTHORS
Written by Yorhel <projects@yorhel.nl>

BUGS
Directory hard links and firmlinks (MacOS) are not supported. They are not detected as being hard links and will thus get scanned and counted multiple times.

Some minor glitches may appear when displaying filenames that contain multibyte or multicolumn characters.

The unique and shared directory sizes are calculated based on the assumption that the link count of hard links does not change during a filesystem scan or in between refreshes. If this does happen, for example when a hard link is deleted, then these numbers will be very much incorrect and a full refresh by restarting ncdu is needed to get correct numbers again.

All sizes are internally represented as a signed 64bit integer. If you have a directory larger than 8 EiB minus one byte, ncdu will clip its size to 8 EiB minus one byte. When deleting or refreshing items in a directory with a clipped size, the resulting sizes will be incorrect. Likewise, item counts are stored in a 32-bit integer, so will be incorrect in the unlikely event that you happen to have more than 4 billion items in a directory.

Please report any other bugs you may find at the bug tracker, which can be found on the web site at https://dev.yorhel.nl/ncdu