xdiskusage ‐ Graphical display of disk usage

xdiskusage [‐a] [‐d[isplay] host:n.n] [‐g[eometry] WxH+X+Y]
[‐t[itle] windowtitle] [‐n[ame] classname] [‐i[conic]] [‐fg
color] [‐bg color] [‐bg2 color] [directory...] [file...]

xdiskusage displays the output of "du" in an X window,
allowing you to graphically compare the sizes that the files
and directories take.

Typing "xdiskusage dir" where "dir" is a folder causes "du"
to be run on that folder and the result displayed.  If the
named file is a symbolic link it is dereferenced before
being sent to du. The "‐a" switch, if given, is passed to
"du" to cause all files to be measured.

Typing "xdiskusage file" where "file" is not a folder makes
xdiskusage parse that file as though it was "du" output and
display the result.

You can type several file and folder names and get several
display windows.

If no files are named, you can pipe the output from another
program to xdiskusage. If stdin is not a terminal xdiskusage
will parse it as "du" output and display the result. For
instance "du ‐k . | xdiskusage".

Typing just "xdiskusage" brings up the disk browser
described here:

By default xdiskusage presents you with a list of all the
disks mounted on your system (it found these by running
"df").  Click one of these names and it will scan the entire
disk (by running "du") and present a graphical display of
how much space all the files are taking on that disk.

You can click on several disks (or on the same disk multiple
times, for instance if you have changed the files stored on
it) and get multiple display windows.

The "rescan" button reruns "df" to get a new list of disks.
You need to do this if you mount or unmount a disk, or to
see new usage percentages.

The (C) button shows you the copyright and license.

You can type a filename into the input field on the bottom


and type Enter. If the name is a directory, xdiskusage will
attempt to run "du" on it and display the result. If the
name is a file it is assumed to be "du" output and it is
parsed and displayed.

The "all files" button sends the ‐a switch to "du" causing
it to list the space for every file on the disk.  This can
significantly increase the time it takes to scan.

Each white box represents a folder.  It’s size is equal to
the sum of all it’s contents (all sub‐folders and files).
To the right of each box are stacked the boxes for the sub‐
folders (and files if the "all files" switch was given).

If you selected a disk from the disk browser, some extra
boxes are added to show information learned from df:

  "(free)" is the free space reported by df.

  "(permission denied)" is space that df said was used but
du did not
  report. Besides permission errors when running du, this
may also be
  the result of a file deleted from its containing folder,
but still
  in use by a program, so its space is not reclaimed yet.
  loopback filesystems (ISO image just checked before
burning, then
  deleted while still mounted) are common examples.

  "(inodes)" is the difference between the total size of the
disk and
  the used + available space reported by du, this is
overhead used by
  the file system.

The left‐most box is the "current root". One of the boxes is
outlined in red, this is the "current node".

Clicking on any box makes it the current node. The arrow
keys can also be used to navigate you around. Hitting return
makes the current node be the current root: putting it on
the left edge and blowing it up to the height of the window
and scaling all it’s contents the same. The left arrow can
be used to move the root and current node back up, or you
can type ’/’ to move just the root, leaving the current node
where it is.

To dismiss any window type Escape.


There is a pop‐up menu on the right‐hand mouse button.
Every item on the menu has a keyboard shortcut.  The menu
items are:

arrow)In(right go to the first child of the current folder.

arrow)Next(down go down to brother of current folder.

arrow)Previous(up go up to the brother of current folder.

arrow)Out(left go to parent of current folder.

(slash)Rootout move the root of the window up to it’s

Hide(h) remove this node from the display and scale rest up
to fit

Unhide(H) Recursively turn off the hide flag from all

Sort/Largest(s) sort largest size at the top

Sort/Smallest(r) sort smallest size at the top

Sort/Alphabetical(a) sort in alphabetical order

(z)Sort/ReverseAlphabetical sort in backwards alphabetical

Sort/Unsorted(u) sort in the order read from du.

Columns/2‐11(2‐9,0,1) arrange display to have N columns.

ClipboardCopyto the pathname of the current node is put in
the X clipboard (you can then paste it into a shell

Print(p) The current display is printed.  The output is
Encapsulated PostScript.  It will either run it through lpr
(or any command you choose) or send it to a file.

Gets confused by "df" output on some platforms, requiring
platform‐specific code.


This program was inspired by, and the user interface design
copied from, the "xdu" program written by Phillip C.
Dykstra.  <dykstra at ieee dot org> <phil at arl dot army
dot mil>

Stephane Gourichon contributed many suggested improvements.
<stephane dot gourichon at lip6 dot fr>

Copyright (C) 2014 Bill Spitzak

This program is free software; you can redistribute it
and/or modify it under the terms of the GNU General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later

This program is distributed in the hope that it will be
useful, but WITHOUT ANY WARRANTY; without even the implied
PURPOSE.  See the GNU General Public License for more

You should have received a copy of the GNU General Public
License along with this library; if not, write to the Free
Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110‐1301 USA.

Written by Bill Spitzak       spitzak at gee m ail dotcom