QDirStat - Qt-based directory statistics (KDirStat without any KDE - from the original KDirStat author)

Overview

QDirStat

Qt-based directory statistics: KDirStat without any KDE -- from the author of the original KDirStat.

(c) 2015-2021 Stefan Hundhammer [email protected]

Target Platforms: Linux, BSD, Unix-like systems

License: GPL V2

Updated: 2021-09-28

Screenshot

Main window screenshot - notice the multi-selection in the tree and the treemap

Overview

QDirStat is a graphical application to show where your disk space has gone and to help you to clean it up.

This is a Qt-only port of the old Qt3/KDE3-based KDirStat, now based on the latest Qt 5. It does not need any KDE libs or infrastructure. It runs on every X11-based desktop on Linux, BSD and other Unix-like systems and of course in a Docker container.

QDirStat has a number of new features compared to KDirStat. To name a few:

  • Multi-selection in both the tree and the treemap.

  • Unlimited number of user-defined cleanup actions.

  • Properly show errors of cleanup actions (and their output, if desired).

  • Configurable file categories (MIME types), treemap colors, exclude rules, tree columns.

  • Package manager support:

    • Show what software package a system file belongs to.
    • Packages view showing disk usage of installed software packages and their individual files.
    • Unpackaged files view showing what files in system directories do not belong to any installed software package.
  • New views:

    • Disk usage per file type (by filename extension).
    • File size histogram view.
    • File Age View
    • Free, used and reserved disk size for each mounted filesystem (like df)

See section New Features for more details.

Table of Contents

  1. Screenshot
  2. Latest Stable Release
  3. Latest News
  4. History
  5. Related Software: KDirStat, WinDirStat, K4DirStat and more
  6. Motivation / Rant: Why?
  7. Features
  8. MacOS X Compatibility
  9. Windows Compatibility
  10. Ready-made Packages
  11. QDirStat Docker Container
  12. Building
  13. Contributing
  14. Troubleshooting
  15. Further Reading
  16. Packaging Status
  17. Donate

More Screenshots

Full-size images and descriptions on the Screenshots Page


Donate

QDirStat is Free Open Source Software.

If you find it useful, please consider donating. You can donate any amount of your choice via PayPal:

paypal

Latest Stable Release

QDirStat V1.8

See the release announcement.

Download installable binary packages for various Linux distributions here: Ready-made packages

Latest News

  • 2021-09-28

    • Merged the changes for GitHub issue #176 to master:

      In the treemap, a middle click now also behaves like a left click (including Ctrl+click); but it also displays white frames indicating the parent directories of that item, and everything that does not belong to that directory branch is covered by a transparent overlay.

      See GitHub issue #181 for a screenshot and more details.

  • 2021-08-28 New stable release: 1.8

    Summary:

    • New view: File Age Statistics

    • Navigation history like in a web browser (Back, Forward)

    • Bug fixes

    • Some small improvements

    Details:

    • New view: File Age Statistics

      This shows the number of files per year and/or per month that were last modified in that year or month, together with the total size of those files and a percent bar for both (number and total size).

    • New documentation for that view: File Age Statistics

    • Navigation history for directories like in a web browser:

      • New buttons Back / Forward in the tool bar

      • Standard keyboard shortcuts [Alt] [Cursor Left] / [Alt] [Cursor Right] like in all common web browsers

      • Support for Back / Forward mouse buttons if the mouse has them

      • History menu on those buttons (long press on the buttons) for the last 16 directories

    • Internal restructuring and refactoring to keep the code maintainable

    • Bug fixes:

      • Fixed GitHub issue #169: Shorten path components in the breadcrumb widget for insanely long paths.

      • Now closing a left-over Permissions error panel when refreshing from disk. After the re-read, the permissions error may no longer be there.

    • Small improvements:

      • In the Mounted Filesystems window, don't show inactive mounts managed by the automounter anymore.

      • In the Open Directory window, automatically open the first directory level if a path was clicked in the Places list on the left, and scroll the tree on the right so that path is at the top.

      • Added a little margin to the left in the main window's tree view for the Size column so it looks now less cramped.


  • 2021-06-21 QDirStat AppImage and why I don't like it

    TL;DR:

    • It's big and fat (113 MB)
    • It's an outdated version (QDirStat 1.6.1 from 16 months ago)
    • It doesn't even tell you what version it contains
    • It still needs a fairly recent version of GLibc, so you can't run it on Ubuntu 18.04 LTS
    • It's unclear if at least the libraries inside (e.g. the Qt libs) are up to date

See DevHistory.md for older entries.

History

This is just a rough summary. For more details, see DevHistory.md.

  • 2021-08-28 New stable release: 1.8

    • New view: File Age Statistics

    • Navigation history like in a web browser (Back, Forward)

    • Bug fixes

    • Some small improvements

  • 2021-04-05 New stable release: 1.7.1

    • Added a "Discover" toplevel menu with actions to easily find

      • the largest files
      • the newest files
      • the oldest files
      • files with multiple hard links
      • broken symbolic links
      • sparse files
    • Now showing the target of symbolic links in the details panel. If the target does not exist, a Broken Link warning is also shown.

    • Menu reorganization. The new toplevel menus are now:

      File, Edit, View, Go To, Discover, Clean up, Help

  • 2020-07-26 New stable release: 1.7

    • Closing the gap between sizes reported by QDirstat and sizes reported by the du command: Now also taking the allocated size into account.

    • Now also displaying the allocated size where it makes sense.

    • New "Mounted Filesystems" window showing output similar to the df command (but without the cruft).

    • New directory selection dialog showing all (real) filesystems.

  • 2020-02-13 New stable release: 1.6.1

    • Much better handling for "permission denied" errors while reading directories

    • Now showing the exact byte size (134 495 994 Bytes instead of 128.3 MB) upon mouse click

    • New optional tree column "Oldest File" (not enabled by default)

  • 2019-07-22 New stable release: V1.6

    • New packages view

    • New unpackaged files view

    • Performance improvements while reading directories

    • Vast Performance improvement for huge directories (100.000+ entries in a single directory)

  • 2018-11-07 New stable release: V1.5

    • New details panel

    • Package manager support to show what software package a file belongs to

    • New breadcrumbs navigation

    • Switchable tree layouts L1 / L2 / L3

  • 2017-06-04 New stable release: V1.4

    • New file size statistics with histogram

    • Shading for empty space in the treemap for lots of very small files

  • 2017-03-05 New stable release: V1.3

    • New file type view

    • Locate files of a certain type (filename extension) in the tree

  • 2017-01-03 New stable release: V1.2

    • Improved Btrfs subvolumes support
  • 2016-10-31 New stable release: V1.1-Pumpkin

    • Bug fixes

    • Split up the config file into several ones

  • 2016-05-16 First stable release: V1.0

  • 2016-04-08 Beta 3 release

  • 2016-03-20 Beta 2 release

  • 2016-02-06 Beta 1 release

  • 2015-11-28 QDirStat project start: Ported from the old KDE 3 KDirStat

  • Predecessor: KDE 3 KDirStat

    • 2006-06-01 KDirStat 2.5.3: The last KDE3 based version.

    • 2003: Bernhard Seifert wrote WinDirStat based on the KDirStat idea of coupling a tree view and a treemap and providing cleanup actions.

    • 2003-01-05 KDirStat 2.3.3: Treemaps

    • 2002-02-25 KDirStat 2.0.0: Complete rewrite for KDE 2 / Qt 2

    • 2000-01-21 KDirStat 0.86 for KDE 1 announced: First public version.

Related Software

KDirStat and QDirStat

KDirStat was the first program of this kind (combining a traditional tree view with a treemap), also written by the same author as QDirStat. It was made for KDE 1 back in early 2000; later ported to KDE 2, then KDE 3.

QDirStat is based on that code, but made independent of any KDE libraries or infrastructure, so it has much fewer library and package dependencies; basically only the Qt 5 libs and libz, both of which most Linux / BSD machines have installed anyway if there is any graphical desktop installed.

WinDirStat and QDirStat

There are lots of articles and user forum comments about QDirStat being a "nice Linux port of WinDirStat". Well, nothing could be further from the truth: WinDirStat is a Windows port of KDirStat, the predecessor of QDirStat.

So it's the other way round: The Linux version was there first, and somebody liked it so much that he wrote a Windows version based on that idea. That's a rare thing; usually people port Windows originals to Linux.

See also https://windirstat.net/background.html and the WinDirStat "About" dialog.

QDirStat and K4DirStat

K4DirStat is a port to KDE 4 / Qt 4 of the old KDE 3 / Qt 3 KDirStat. QDirStat is independent of that; it is based on the old KDE 3 KDirStat directly.

Other

  • Baobab
  • Filelight
  • ncdu
  • du

See Disk Usage Tools Compared: QDirStat vs. K4DirStat vs. Baobab vs. Filelight vs. ncdu (including benchmarks) in the Wiki.

Motivation / Rant: Why?

After having used KDE since its early days (since about 1998), I didn't like the direction anymore that KDE has been taking. I loved KDE 1, KDE 2, KDE 3. When KDE 4 came along, it took me a long time to try to adopt it, and when I did, I moved back to KDE 3 after a short while, then tried again with the next release, moved back again -- several times.

I really tried to like it, but whenever I thought I tamed it to meet my requirements, a new version came along that introduced yet another annoyance.

To name a few:

  • A lot of things that used to be user configurable in KDE 3 are not configurable anymore, and when you approach the KDE 4/5 developers about that, they will tell you that this is intentional, and they do not intend to bring those config options back. Well, thanks a lot; this is the Apple approach where they think they know what is good for you, and you are just too stupid.

  • Konqueror as the old central tool is as good as dead. It's still there as an alternate file manager (for those who find it), but the primary one is the dumbed-down Dolphin that I consider unusable: It's only useful for complete newbies, not for power users. The web browser part of Konqueror is so outdated that you can't do much with it with most modern web sites, so the great integration of web and local file manager that was the major strong point of Konqueror (and thus KDE) no longer exists.

  • I don't like the fact that I can't simply put icons on my desktop anymore -- no, I have to create a plasmoid first as a container, and those things keep doing weird stuff that drives every user crazy. With one false move of your mouse, it might be gone, change shape, move to another place or whatever.

  • I also don't like the desktop search that eats resources like there is no tomorrow (disk space, disk I/O, CPU usage) and that for all practical purposes you can't get rid of.

  • I don't like the fact that the mail client relies on that MySQL based framework called Akonadi that is not only resource-hungry, but also so fragile that I had to use the akonadiconsole lots of times just to bring it back to life. Seriously, if I as a Linux system developer have a hard time doing that, what is a normal user expected to do?

  • Activities vs. multiple desktops. I tried to use both, but they don't integrate well. The desktops previewer is far inferior to the old one from KDE3: Only monochrome rectangles, no real preview. The activities plasmoid keeps rearranging my carefully placed and named activities at random. WTF?!

  • Everything is so fragmented that not even the naming is clear anymore. What used to be KDE is now a jumble of the KF Framework, the KF libs, the KF apps and the Plasma desktop. Yeah, great job, folks; people used to know what KDE stood for. Nobody knows what the hell all those components are, and neither does anybody care anymore. You paved your way to oblivion with buzzwords. Great marketing strategy for gaining more visibility!

Then the next generation KDE arrived, Plasma 5. When I was force-migrated to it at work with the SUSE Tumbleweed rolling release, the experience was so bad that I moved to the Xfce Desktop.

Now every time I started my own KDirStat, it started about a dozen KDE processes along with it -- processes that it needs only for minor things like loading icons or translations. I really don't need or want that.

So it was time to make KDirStat self-sufficient; it never used that much of all the KDE infrastructure anyway. Time to make a pure Qt-based and self-sufficient QDirStat.

And while I was at it, I took the chance to add some features that I had wanted for a long time, yet I had never gotten myself to start working on:

  • Multi-selection in the directory tree so you can delete several files at once.

  • Remove limitations like having only a fixed number of user-defined cleanup actions.

  • Properly show the output of cleanup actions, in particular when they reported errors.

  • Make treemap colors configurable: Use custom colors and match them to user-defined filename extensions.

  • Move away from the arcane KDE build system: Back with KDE 1/2/3 it was the Autotools with custom KDE extensions that only a handful people in the world really understood (I was not among them), later CMake which is little better, just differently confusing.

Yes, there is a Qt4 / Qt5 port of KDirStat called K4DirStat. K4DirStat is an independent project that started when I had not worked on the old KDirStat for a long time (my last KDirStat release had been in mid-2006).

QDirStat is based on that same code from the 2006 KDirStat. It's an 80% rewrite using a lot of newer Qt technologies. And there was a lot of cleaning up that old code base that had been long overdue.

Features

New Features

  • Multi-selection:

    • Both views (the tree and the treemap) now support extended selection, i.e. you can select more than one item. This was the most requested feature for the last KDirStat. Now you can select more than one item at the same time to move it to the trash can, to directly delete it or whatever.

    • Tree view:

      • Shift-click: Select a range of items.
      • Ctrl-Click: Select an additional item or deselect a selected one.
    • Treemap:

      • Ctrl-Click: Select an additional item or deselect a selected one.

      • The current item is highlighted with a red rectangle, all other selected ones with a yellow rectangle. If the current item is not also selected, it has a dotted red outline.

  • Proper output of cleanup actions with different colors for the commands that are executed, for their output and for error messages (see screenshot above). That output window can be configured to always open, to open after a certain (configurable) timeout, or only if there are error messages -- or not at all, of course. If things go wrong, you can kill the external command started by the cleanup action from there. You can zoom in and out (increase or decrease the font size) as you like.

  • File type statistics window. WinDirStat has it, and users wanted it in QDirStat, too. Since filename extensions (suffixes) don't have as much semantics in Linux/Unix systems as they do in Windows, many files are categorized as "Other". This is a known limitation, but it's a limitation of the whole concept of using suffixes to categorize files by type. And no, checking file headers for magic byte sequences like the "file" command does is not an option here; QDirStat would have to do that for (at least) all the 30,000+ files typically listed under the "Other" category. So we'll have to live with that limitation.

  • Locate files by file type window. If you double-click on any of the filename extensions (suffixes) in the file type statistics window, you will get another window that lists all the directories that contain files of that type including the number and total size of those files. You can double-click each of those lines, and that directory will open in the main window with the files of that type preselected so you can start cleanup actions like moving them to trash or converting them to a better format (.bmp -> .png) immediately.

  • File size statistics window with histogram, percentiles, buckets and a lot of documentation that everybody should be able to understand. Even if (or, better yet, in particular if) your math teacher or statistics professor never explained it properly, please have a look at it.

  • File age statistics window: This lists the number and total size of changed files by years and for recent (13-24) months. You can see in what time frame there was any activity (i.e. any changes) in a directory tree, i.e. when it last was in active use; or if it might be a good candidate to be moved to archive media.

  • Packages view: Show installed packages and their files in the tree. Supported for all Linux distributions using any of dpkg, rpm, pacman as their low-level package manager or any higher-level package manager like apt, zypper etc.; more details at Pkg-View.md.

  • Unpackaged files view: Show a directory tree, but ignore all files that belong to an installed software package. Those ignored files are displayed in a special branch in the tree view, and they are not displayed at all in the treemap. This is useful to find files that were manually installed by a sudo make install command. More details at Unpkg-View.md.

  • New macros to use in cleanup actions:

    • %d : Directory name with full path. For directories, this is the same as %p. For files, this is their parent directory's %p.

    • %terminal : Terminal window application of the current desktop; one of "konsole", "gnome-terminal", "xfce4-terminal", "lxterminal", "eterm". The fallback is "xterm".

    • %filemanager : File manager application of the current desktop; one of "konqueror", "nautilus", "thunar", "pcmanfm". The fallback is "xdg-open".

  • Which desktop is used is determined by the $XDG_CURRENT_DESKTOP environment variable. Users can override this with the $QDIRSTAT_DESKTOP environment variable, so you can get, say, the Xfce terminal or file manager despite currently running KDE if you set

    export QDIRSTAT_DESKTOP="Xfce"
    
  • Of course, you can still simply use your favourite file manager if you simply change %filemanager in the default "Open File Manager Here" cleanup action to the command to start it.

  • You can now select the shell to use for the cleanup commands:

    • $SHELL (the user's login shell) - using the same environment, syntax and wildcard etc. behaviour of the shell the user is used to.
    • /bin/bash for well-defined behaviour for wildcards etc.
    • /bin/sh as a last resort (which might be a simplistic dash on Ubuntu).
  • Mouse actions in the treemap window:

    • Left click: Select item and make it the current item.
    • Right click: Open the context menu with cleanup actions and more.
    • Ctrl+Left click: Add item to selection or toggle selection.
    • Middle click: Like left click, but also show directory borders.
    • Ctrl+Middle click: Like Ctrl+left click, but also show directory borders.
    • Double click left: Zoom treemap in.
    • Double click middle: Zoom treemap out.
    • Mouse wheel: Zoom treemap in or out.
  • You can configure what columns to display in the tree view and in which order. The only thing that is fixed is the "Name" column which is always there and always the first (leftmost). Use the context menu in the tree header to unlock column widths. Drag columns to the left or right to change their order.

  • Exclude rules are now greatly simplified. They no longer always get the entire path to match which requires quite complex regexps; by default, they only get the last path component -- i.e., no longer "/work/home/sh/src/qdirstat/src/.git", but only ".git". You can now even tell the exclude rule to use a simplified syntax: "FixedString" or "Wildcard" in addition to the normal "RegExp". The old behaviour (matching against the full path) is still available, though.

  • Configuration dialog for exclude rules -- see screenshots.

  • Subvolume detection for Btrfs. Btrfs subvolumes are just ordinary mount points, so normally QDirStat would stop scanning there, leaving a large part of a Btrfs partition unaccounted for. But for each mount point found while scanning a directory tree, QDirStat checks /proc/mounts or /etc/mtab if it has the same device name as its parent directory, and if yes, considers it a subvolume and continues scanning.

  • Actions to go one directory level higher or to the toplevel: Context menu and menu "Go To" -> "Up One Level" or "Toplevel". This is useful if you clicked on a file in the treemap that is deep down in some subdirectory, and you want to know what subdirectory that is: Simply click "Go Up" twice (the first click will get you to the pseudo subdirectory, the second one to the real one).

  • Open all tree branches up to a certain level and close all other ones: Menu "View" -> "Expand Tree To Level" -> "Level 0" ... "Level 9".

  • The total sum of the selected items (subtrees) is displayed in the status line if more than one item is selected.

  • Icons are now compiled into the source thanks to Qt's resource system; now it's just one binary file, and nothing will go missing. No more dozens of little files to handle.

  • The build system is now Qt's QMake. I got rid of that AutoTools (Automake, Autoconf, Libtool) stuff that most developers find intimidating with its crude M4 macro processor syntax. QMake .pro files are so much simpler, and they do the job just as well. And no, it will definitely never be CMake: I don't like that thing at all. It's just as much as a PITA as the AutoTools, just not as portable, no usable documentation, it's changing all the time, and those out-of-source builds are a royal PITA all on their own with constantly having to change back and forth between source and build directories.

  • QDirStat now has its own log file. It now logs to /tmp/qdirstat-$USER/qdirstat.log (where $USER is your Linux user name). No more messages on stdout that either clobber the shell you started the program from or that simply go missing.

  • No longer depending on dozens of KDE libs and a lot of KDE infrastructure; it now only requires Qt which is typically installed anyway on a Linux / BSD / Unix machine with any X11 (graphical) desktop.

  • It should still compile and work with Qt4. We now have a contributor who is very interested in that (Michael Matz), so it should be possible to maintain this compatibility.

  • Slow down display update from 333 millisec (default) to 3 sec (default) with qdirstat --slow-update or qdirstat -s. The slow update interval can be customized in ~/.config/QDirStat/QDirStat.conf:

    [DirectoryTree]
    SlowUpdateMillisec = 3000

Old Features

Features ported from the old KDirStat:

  • Fast and efficient directory reading.

  • Not crossing filesystem boundaries by default so you can see what eats up all the disk space on your root filesystem without getting distorted numbers due to all the other filesystems that are mounted there. If you absolutely wish, you can use "Continue reading at mount point" from the context menu or from the "File" menu -- or configure QDirStat to always read across file systems.

  • Efficient memory usage. A modern Linux root filesystem has well over 800,000 objects (files, directories, symlinks, ...) and about 100,000 directories. This calls for minimalistic C++ objects to represent each one of them. QDirStat / KDirStat do their best to minimize that memory footprint.

  • Hierarchical tree view that displays accumulated sums in each branch, together with a percent bar so you can see at a glimpse how the subdirectories compare with each other.

  • All numbers displayed human readable -- e.g., 34.4 MB instead of 36116381 Bytes.

  • All size units are 1024-based, i.e. 1 kB = 1024 Bytes; 1 MB = 1024 kB; 1 GB = 1024 MB.

  • In the tree, also displaying the exact byte size as the context menu (right click).

  • Each tree level uses another color for that percent bar so you can easily compare subdirectories even if some of them are opened in the tree.

  • If a directory has files and subdirectories, all files in that subdirectory are grouped into a pseudo directory (called dot entry in the QDirStat sources) so you can compare the disk usage of files on that directory level with the subdirectories.

  • Displaying the latest modification time of any object in each branch. You can instantly see in what subdirectory where any changes lately. You can sort by this column, of course.

  • Treemap display. Treemaps are a way to visualize hierarchical data structures, invented by Ben Shneiderman. Basically, the hierarchy is flattened and each level grouped in a rectangle, inside which it is again subdivided in rectangles. The area of each rectangle corresponds to the size of each item or subdirectory. For the purposes of QDirStat, it is enough to know that a large blob corresponds to a large file; you can instantly see where large ISOs or movies are.

  • You can zoom the treemap in and out (Ctrl + / Ctrl - / mouse wheel / menu / tool bar) to see more details of directories that are otherwise dominated by larger ones.

  • You can move the boundary between treemap and tree view up and down as you like. You can also get rid of the treemap completely (menu "Treemap" -> "Show Treemap" or F9 key)

  • Treemap and tree list view communicate. Select an item in one view, and it is also selected in the other. If you click on that large blob in the treemap, it is located in the tree view, all branches up to its directory are opened, and the tree view scrolls to that item.

  • Cleanup actions. Once you know what is consuming the disk space, you can start cleanup actions from within QDirStat to reclaim disk space - or to investigate further if you can safely delete a file. You can create your own cleanup actions (as many as you like), and there are some predefined ones:

    • Open file manager here. This will start a file manager in the directory of the current item. QDirStat tries its best to guess the name of the relevant file manager application for the current desktop, based on the $XDG_CURRENT_DESKTOP environment variable. You can override this with the $QDIRSTAT_DESKTOP environment variable.

    • Open terminal window here. In most cases, this is much easier than to navigate to that directory with 'cd' in an already open terminal window and using tab-completion numerous times. As with the file manager application, QDirStat tries its best to guess the name of the relevant terminal window application for the current desktop.

    • Move to trash bin. QDirStat has its own implementation of the XDG trash specification.

    • Delete immediately.

    • Compress: Create a compressed tar archive from a directory and then delete the directory.

    • Delete junk files: Backup files left behind by editors, core dumps.

    • All predefined cleanup actions are fully configurable, of course. You can change any of them, disable them, or delete them.

  • You can copy the complete path of the selected file or directory to the system clipboard and paste it to another application.

  • Reading and writing cache files:

    • This is mostly meant for remote servers in some server room somewhere: Rather than installing the Qt and X11 runtime environment and running QDirStat over remote X (ssh with X forwarding), you can run the supplied qdirstat-cache-writer Perl script on the server, copy the resulting cache file to your desktop machine and view the content there with QDirStat.

    • For large directories (archives etc.) that don't change that much, you can also generate a QDirStat cache file (either with the Perl script or with QDirStat itself) and save it to that corresponding directory. If QDirStat finds a file .qdirstat.cache.gz in a directory, it checks if the toplevel directory in that cache file is the same as the current directory, and if it is, it uses the cache file for that directory rather than reading all subdirectories from disk. If you or the users of that machine use QDirStat often, this might take a lot of I/O load from the server.

    • If you use the '-l' option of the qdirstat-cache-writer script, it uses the long file format with a complete path for each entry, so you can use the zgrep command with it as a replacement for the locate command.

    • The KDirStat / QDirStat file format is well documented and very simple. It seems to be used by a number of admins and some backup software. See also the specification in the doc/ directory: https://github.com/shundhammer/qdirstat/blob/master/doc/cache-file-format.txt

    • You can specify a cache file to read directly at the command line:

      qdirstat --cache cache-file
      
  • Other command line options: See

    qdirstat --help
    

Features that are Gone

(Compared to the old KDirStat)

  • Pacman animation
  • KIO slave support
  • Feedback form
  • KPacman: That was that PacMan animation wile reading directory reading. This is gone now. KPacMan looked out of place pretty soon after it got to KDirStat due to Qt styles doing fancy rendering of widget backgrounds with gradients etc. I know that it does have its fans, but it's unrealistic to get this back without breaking the menu bar rendering.

  • KioDirReadJob: Network-transparent directory reading for network protocols like FTP, HTTP, Fish (ssh-based). This depended on KDE's KIO slaves, so this functionality is gone now without KDE. That's a pity, but this is a little price to be paid to avoid the rest of the hassle with using the KDE libs.

  • KFeedback: That was that form where users could tell their opinion about KDirstat. But that was not used that often anyway - not nearly enough to justify the effort that has gone into that part. And the KDE usability people, like usability people generally tend to do, first discussed that to death and then decided they didn't want anything like that in general in KDE applications. So be it.

  • KActivityTracker: That was a supporting class for KFeedback that kept track of how much a user was using the program and after a while (when it was determined that it made sense) asked if the user wouldn't like to give his feedback about the program. Don't you all just hate those dumbass web designers who tell you to do a survey how much you like their grand web page before you even had a chance to look at it? Shove a pop-up up your face covering the stuff you are interesting in with their self-loving marketing bullshit? -- KActivityTracker was made to avoid exactly this: Ask the user only once you know that he actually used the program for a while.

MacOS X Compatibility

There is some experimental support for MacOS X, but it's really only that: Experimental.

I was amazed to find that it doesn't take more than the normal "qmake" and then "make" to build QDirStat for MacOS X. We (Sonja Krause-Harder and I) did some basic testing, and it seems to work.

The cleanups may need some adaptation, but this is something that might even be configured by the user.

If anybody wants to give it a try, download Qt for MacOS X, install it, open a shell window, search the qmake command:

find . -name qmake

Add this to your $PATH, then do the normal

qmake
make

Not sure how well "make install" works, though.

Be advised that QDirStat on MacOS X is purely experimental at this stage.

There is no support. If you try this, you are on your own. Even more so than with the other platforms, you will have to make sure that your Qt build environment is set up correctly.

There be dragons. ;-)

Architecture maintainer wanted for QDirStat for MacOS X

If you are a developer with some prior C++ and Qt knowledge on the MacOS X platform and you'd like to see QDirStat working there, please consider joining the team.

Windows Compatibility

There is no native Windows version, but you can use the docker container. Other than that, there is WinDirStat.

There are currently no plans for doing a native Windows port.

Directory reading might be quite easy to replace for Windows; we don't have that problem with devices and crossing filesystems on that platform.

But the cleanups might be a challenge, "move to trash" works completely differently, and we'd need an installer for a Windows version.

So, for the time being, use the docker or WinDirStat instead.

WinDirStat is a close relative to the KDirStat family anyway; the author had liked KDirStat on Linux so much that he decided to write a Windows clone and called it WinDirStat.

Ready-made Packages

Packaging status

openSUSE / SUSE Linux Enterprise

QDirStat packages for openSUSE Tumbleweed / Leap (15.x, 42.x) and SLE (15, 12) (Notice that Leap 15.3 is wrongly sorted into the SLE category, not openSUSE as it should):

  • Download page for the latest stable release

  • Download page for the current development version (git master)

    Since this version is in development, it may be not quite as stable and reliable as the latest official stable release, although the QDirStat developers try their best to keep it as stable as possible.

Ubuntu

https://packages.ubuntu.com/search?keywords=qdirstat&searchon=names

Debian

https://packages.debian.org/search?keywords=qdirstat

Fedora

https://apps.fedoraproject.org/packages/qdirstat/builds/

QDirStat Docker Container

@jlesage kindly provides a docker container for QDirStat.

That makes QDirStat usable even on non-Linux / non-Unix systems such as Windows or MacOS X.

Docker is basically a virtualized environment to run software that was designed for a different operating system.

It is very much like using VmWare or VirtualBox, but with much less overhead: You don't have to install that other system first and then on top of that the application that you really want to run. A docker container contains everything that is needed, and it is preconfigured for that application.

How to use Docker on Windows

  • Download and install Docker Desktop for Windows
  • Use the Docker Desktop for Windows to launch the QDirStat Docker (as a Linux container)
  • Adapt the command line so the disk that you want to explore is used

More information:

Building

Notice that for most mainstream Linux or BSD distributions you don't have to build your own; you can simply install a ready-made package from your normal package manager.

Build Environment

Make sure you have a working Qt 5 build environment installed. This includes:

  • C++ compiler (gcc recommended)
  • Qt 5 runtime environment
  • Qt 5 header files
  • libz (compression lib) runtime and header file

If anything doesn't work, first of all make sure you can build any of the simple examples supplied with Qt, e.g. the calculator example.

Ubuntu

Install the required packages for building:

sudo apt-get install build-essential qtbase5-dev zlib1g-dev

Dependent packages will be added automatically.

Recommended packages for developers:

sudo apt-get install qttools5-dev-tools qtbase5-doc qtbase5-doc-html qtbase5-examples

See also

https://askubuntu.com/questions/508503/whats-the-development-package-for-qt5-in-14-04

If you also have a Qt4 development environment installed, select the desired one via qtchooser:

sudo apt-get install qtchooser
export QT_SELECT="qt5"

SUSE

Install the required packages for building:

sudo zypper install -t pattern devel_C_C++
sudo zypper install libQt5Widgets-devel libqt5-qttools zlib-devel

If you also have a Qt4 development environment installed, make sure that the Qt5 version of 'qmake' is the first in your $PATH:

export PATH=/usr/lib64/qt5/bin:$PATH

Compiling

Open a shell window, go to the QDirStat source directory, then enter these commands:

qmake
make

Installing

sudo make install

or

su -c make install

Install to a Custom Directory

The default setup installs everything to /usr. To install to another directory, set INSTALL_PREFIX during qmake.

qmake INSTALL_PREFIX=/usr/local

Beware that some things might not work as expected; for example, you will not get a .desktop file in the proper place to make QDirStat appear in any menus in your graphical desktop environment or in the file manager. You will need to copy the .desktop file manually to whatever directory your graphical desktop environment uses somewhere in your home directory. Similar with the application icon used in that .desktop file.

Contributing

See file Contributing.md and GitHub-Workflow.md

Troubleshooting

Can't Move a Directory to Trash

See file Troubleshooting.md

Further Reading

Of course, don't forget to check out the doc directory.

Packaging Status

Repology: QDirStat versions in Linux / BSD distributions:

Repology

(click for details)

Donate

QDirStat is Free Open Source Software.

If you find it useful, please consider donating. You can donate any amount of your choice via PayPal:

paypal

Comments
  • Highlight Parent Directory in Treemap Upon Mouse Hover (Was: Improving of the treemap mouse actions)

    Highlight Parent Directory in Treemap Upon Mouse Hover (Was: Improving of the treemap mouse actions)

    Good day. Here I am with a zoom issue again.

    What I would like to see is the hover effects to be more noticeable. Here is what I have on my mind:

    1. Simply hovering over the content of directory will outline it (on the current level) Because presently it is rather difficult to understand where one directory ends and another begins
    2. Clicking, or double-clicking it (the highlighted directory) will move to it in the tree and zoom that directory on the treemap
    3. Loop (look #1)

    In short, I would love to have experience similar to what I had with GdMap in this regard, but with QDirStat.

    feature request 
    opened by sakkamade 63
  • [Suggestion] Add an extension table with stats

    [Suggestion] Add an extension table with stats

    WinDirStat has this extension table that lets you see files by their extension.

    I'd love to see this feature in QDirStat, as I think it'd be helpful to many people. Personally right now I'd like to see how much data I have in image files, but I cannot use QDirStat to find out.

    feature request 
    opened by C0rn3j 32
  • Multi-hardlink file sizes look incorrect on CentOS 6.5

    Multi-hardlink file sizes look incorrect on CentOS 6.5

    I built the QDirStat on CentOS 6.5 successfully and it seems to run properly. But the sizes reported are far too low. I'm analyzing a massive directory tree: 1/4 TB over 1 M files. The behavior suggest integer overflow. Has anybody experienced such behavior?

    opened by DennisFlanagan 29
  • NTFS: Hard links make size of directories appear as half of the size of their actual content

    NTFS: Hard links make size of directories appear as half of the size of their actual content

    When I was analyzing a tree of an NTFS volume, I have noticed that directory sizes do not match the sum of the file sizes that constitute them.

    For example, there are four files in a directory: one of size of 1.0MB, one of 768kB and two 2.2kB files. QDirStat 1.5 shows me that this directory contains 902.3 kB of data which is roughly half of what it actually contains.

    This bug (?) does not seem to appear on EXT4 file systems.

    opened by ajz3d 28
  • Feature request: exclude with right mouse click menu

    Feature request: exclude with right mouse click menu

    Could an option be implemented on the context menu that shows up under the right mouse button click? I like to exclude directories and files that way. Rescanning the disk is not needed in this case. Then i like to export this list to a file to use it as the tar --exclude-ignore= option. This is a great way to exclude big files and backup the rest.

    By the way there seems to be a small bug in the exclude list at the moment. When the list is empty and i type something in "exclude directories with pattern" and then click on the Plus symbol a new item without text shows up. Then i have to re-type the text again to make it show up in the item. Why is the text not added in first instance? (Qdirstat 1.4)

    I think a big textarea would be a bit more handy than using all the GUI buttons

    Q: Is Wildcards compatible with the format --exclude-ignore expects ? (this should be similar to .gitignore)

    Q: When adding a new rule (with Plus) could Pattern syntax be set to whatever it was set to when editing the last rule? Right now it seems to default on regular expression

    Q: (a bit offtopic but didn't want to start a new issue): Can the stop reading button be placed on the icon bar?

    Q: would it be possible to add an option to match to the relative directory? Or possibly read .ignore or .gitignore files?

    Q: could the ignore list be auto-sorted? (or a textarea so i can sort it myself in a text editor)

    Q: is the /**/ wildcard supported for matching directories with arbitrary depth?

    I noticed the list is stored in ~/.config/QDirStat-exclude.conf ... that's great ! that means i can hack my way around it and prepare the list before i start QDirStat :D

    feature request 
    opened by flip111 25
  • Filter / Show / Hide file types in treemap

    Filter / Show / Hide file types in treemap

    This is just a feature request. When looking through files, sometimes large files obfuscate smaller files visually in the treemap. Or other times I'd just like to focus on cleaning up certain file types.

    It would be useful if there was either a filter bar that let you add file types to show, or a menu that showed the MIME Categories (from your settings configuration) and let you check or uncheck either certain categories, or file types within those categories.

    I read a few requests on here to ignore certain file types while scanning and that has been rejected. This may be rejected also being somewhat similar, but I am asking not to ignore files when scanning, but simply to filter the treemap results.

    Thanks for the consideration and for this great program.

    feature request 
    opened by newhoa 22
  • Show real-time changes, like SpaceSniffer?

    Show real-time changes, like SpaceSniffer?

    Hi, there is a great feature with SpaceSniffer (Windows) that shows the real-time changes on the file system after displaying the directories in a very similar way to QDirStat, by showing little flashes when a directory is written to. Is there any way to port that functionality? I know there is inotifywait, but it would be great to have a system-wide view of the filesystem (maybe minus a couple of cache directories).

    It is on GItHub: https://github.com/marzwu/SpaceSniffer/ Wikipedia has a screenshot: https://en.wikipedia.org/wiki/SpaceSniffer

    feature request 
    opened by auwsom 18
  • Option to continue reading at all mount points once

    Option to continue reading at all mount points once

    Currently there is an option in settings to always continue reading at mount points, and one to continue reading at a specific mount points.

    It would be nice to also have the option to cross all boundaries in the current search (but not by default). For example during the "open directory" dialog, or as a menu option below "continue reading at current mount point"

    feature request 
    opened by phiresky 18
  • Integrate the file stats and directories with the main window

    Integrate the file stats and directories with the main window

    How I imagine this to look/be positioned - http://i.imgur.com/e77oD7R.png

    I think this would be a great default option with the ability to resize all 3 windows and be able to pop them out so they act like they currently do for people who'd like to use them as such

    With the way it currently is it feels cluttery on a lower than FHD res screen, and I'd like this even on my FHD screen(currently using lower res TV).

    • Being tracked here too #52

    Also when the directory listing pops out it ignores the last position it was at, it'd be great if it opened at the last position.

    • Fixed! Thanks!

    And as a small side note - it is great to open the file stats menu by F3, would be even better if it worked as toggle and F3 also closed it if it is open.

    • Implemented, thanks!

    And Thank You so much for implementing the file stats feature and making it even better by adding file listings, it makes it so much more useable for me and the listing of files by directories makes it even better than WinDirStat, especially the synergy between all 3 windows is very cool!.

    opened by C0rn3j 18
  • Show file/directory user (owner), group and permissions in tree view

    Show file/directory user (owner), group and permissions in tree view

    Any plan to show the folders/files with their owners' name? And also do owner statistics?

    These features will be very useful in a multi-user environment.

    feature request 
    opened by justinsutw 17
  • Segfault when reading a cache file at the toplevel of the directory tree

    Segfault when reading a cache file at the toplevel of the directory tree

    I have selected an item (I don't remember if it's a file or a directory) and I pressed Delete on my keyboard to remove it.

    Application froze and then, after a while, crashed.

    Stacktrace: ThreadStacktrace.txt

    The log directory is of no use. Full with:

    2019-07-18 10:12:33.552 [24001] <Info>    DirReadJob.cpp:113 crossingFileSystems():  File system boundary at mount point /home/sntentos/.oracle_jre_usage on device <unknown>
    

    And then ends with:

    2019-07-18 10:12:33.552 [24001] <Debug>   DirReadJob.cpp:241 startReading():  Found cache file .qdirstat.cache.gz
    2019-07-18 10:12:33.552 [24001] <Debug>   DirReadJob.cpp:391 readCacheFile():  Using cache file /home/sntentos/.qdirstat.cache.gz for /home/sntentos
    2019-07-18 10:12:33.552 [24001] <Debug>   DirReadJob.cpp:398 readCacheFile():  Clearing complete tree
    

    I have the full apport collection (including core), but I am a bit reluctant to share

    Version 1.5.91-git (you might also want to change that to git-describe i.e. 1.5.91-2-gd4cef3f, and also make your version tags annotated, to be used cleanly with git-describe)

    bug 
    opened by stdedos 16
  • periodic/notified rescanning?

    periodic/notified rescanning?

    An potential feature request to make qdirstat even more awesome:

    Durning a _cleanup frenzy I would love to have the option to do an automatic rescan. On modern (local) SSD systems the impact is so low that it could almost be ignored and is well worth having your changes automatically present in the UI.

    A simplistic way would be to periodically rescan the tree, or the part of the tree that is/was in the view window. A more performant way might be to fsnotify/inotify the whole tree, or again the part in view?

    A further refinement could be if the change was over X bytes, to avoid flagging temp/lock/pid files all the time.

    The output could either be a visual indication on a line "something has changed here", or a re-calc and re-draw of the tree. In the later case it would be nice if the focus was not lost or the UI didn't flicker.

    feature request 
    opened by Mousketeer 2
Releases(1.8.1)
  • 1.8.1(Jun 30, 2022)

    Overview

    The QDirStat project proudly presents its latest release: QDirStat 1.8.1.

    This is a stable release. It brings a some new features and bug fixes:

    Summary

    • New treemap interaction: Middle click in the treemap now highlights the parent directories of the clicked item, and everything outside that branch is dimmed.

    • Some small improvements

    • Bug fixes

    Details

    • A middle click now outlines an item's parent, grandparent etc. directories in the treemap.

      Middle-click it again or click outside the highlighted area to remove the highlight.

      You can use the middle click pretty much like a left click, including Shift- and Ctrl-click to extend the selection.

      See GitHub issue #181 for a screenshot and more details.

    • No longer drawing additional lines in the treemap by default if there is low contrast between individual treemap tiles; that only makes the treemap display uglier for little benefit.

      You can still switch it on with the EnforceContrast setting in the config file (~/.config/QDirStat/QDirStat.conf).

    • Don't show inactive (unmounted) mounts managed by the automounter anymore in the "Places and Mounted Filesystems" bar of the "Open Directory" dialog.

      Notice that those directories are still accessible from the tree at the right side, but they no longer take a prominent place in the left bar.

    • Prevent a hanging Samba (CIFS) or NFS mount from blocking the program, even when no information from that mount is needed at all:

      If you started QDirStat with a path on the command line, it collected the information about used / free / reserved disk space for all mounted filesytems already. If you had a network mount that didn't respond, you still had to wait for a timeout before the program could continue.

      Now it collects that information only when it's really needed:

      • In the "Open Directory" dialog where it displays those sizes in the "Places and Mounted Filesystems" bar on the left

      • In the "Mounted Filesystems" (du-like) window (Menu "View" -> "Show Mounted Filesystems").

    • Now cutting off insanely long generated device names of LUKS devices in the "Mounted Filesystems" window: E.g. /dev/mapper/luks-3fae43... instead of /dev/mapper/luks-3fae4328-4294-4c77-8f98-d437c41da26c. The long name is displayed in a tooltip.

    • Added packed Git archives ("pack-*.pack") to the "Compressed Archives" MIME category, i.e., they appear now in green in the treemap, no longer in the "I don't know what that thing is" grey.

      If you never changed your MIME type configuration, simply delete ~/.config/QDirStat/QDirStat-mime.conf (while QDirStat is not running!) to get this change; it will be regenerated with the new defaults upon the next program start.

    Bug Fixes

    • Fixed GitHub issue #184: When reading a cache file, sparse files were displayed as "allocated: 0 Bytes".

    • Fixed GitHub issue #190: MIME categories for overlapping suffixes

      Files with multiple suffixes like .tar.gz were wrongly sorted into the same MIME category as .gz. It did find the category for the longer one (.tar.gz), but then it continued looking, resulting in the shortest matching one (.gz). Now stopping at the longest hit.

    • Now using xdg-open %d in KDE Plasma for the "Open File Manager Here" standard cleanup action. This may help for GitHub issue #192, yet still maintain the ability to use a powerful file manager like Konqueror (if that is configured), falling back to the standard Dolphin.

    • Improved BSD support (GitHub issue #195): If neither /proc/mounts nor /etc/mtab is available, fall back to using QStorageInfo (if available; Qt 5.4 or later).

      This returns a little less complete information; for example, only rudimentary mount options which are used for some special cases.

    • Bug fix for the "Packages" view for .deb / APT based systems: Now also list packages that are on hold. They were previously missing.

    Donations

    QDirStat is Free Open Source Software.

    If you find it useful, please consider donating. You can donate any amount of your choice via PayPal:

    paypal

    Source code(tar.gz)
    Source code(zip)
  • 1.8(Aug 28, 2021)

    Overview

    The QDirStat project proudly presents its latest release: QDirStat 1.8.

    This is a stable release. It brings a some new features and bug fixes:

    • New view: File Age Statistics

    • Navigation history like in a web browser (Back, Forward)

    • Bug fixes

    • Some small improvements

    Details

    New view: File Age Statistics

    This shows the number of files per year and/or per month that were last modified in that year or month, together with the total size of those files and a percent bar for both (number and total size).

    This view is extensively documented in the File Age Statistics Document.

    Navigation History

    This implements a navigation history for directories like in a web browser:

    • New buttons Back / Forward in the tool bar

    • Standard keyboard shortcuts [Alt] [Cursor Left] / [Alt] [Cursor Right] like in all common web browsers

    • Support for Back / Forward mouse buttons if the mouse has them

    • History menu on those buttons (long press on the buttons) for the last 16 directories

    Bug Fixes

    • Fixed GitHub issue #169: Shorten path components in the breadcrumb widget for insanely long paths.

    • Now closing a left-over Permissions error panel when refreshing from disk: After the re-read, the permissions error may no longer be there.

    Other Improvements

    • In the Mounted Filesystems window, don't show inactive mounts managed by the automounter anymore.

    • In the Open Directory window, automatically open the first directory level if a path was clicked in the Places list on the left, and scroll the tree on the right so that path is at the top.

    • Added a little margin to the left in the main window's tree view for the Size column so it looks now less cramped.

    • Internal restructuring and refactoring to keep the code maintainable.

    Source code(tar.gz)
    Source code(zip)
  • 1.7.1(Apr 5, 2021)

    Overview

    The QDirStat project proudly presents its latest release: QDirStat 1.7.1.

    This is a stable release. It brings a number new features and a bug fix:

    • Added a "Discover" toplevel menu with actions to easily find

      • the largest files
      • the newest files
      • the oldest files
      • files with multiple hard links
      • broken symbolic links
      • sparse files
    • Now showing the target of symbolic links in the details panel. If the target does not exist, a Broken Link warning is also shown.

    • Menu reorganization. The new toplevel menus are now:

      File, Edit, View, Go To, Discover, Clean up, Help

    • Enabled Refresh Selected now for files as well. In that case, the parent directory is refreshed.

    • Added hotkey [F6] for Refresh Selected.

    • Now ignoring the loopback mounts of installed snap packages in the "Open Directory" dialog and in the "Mounted Filesystems" window.

    • Added links to external documents to a new "Problems and Solutions" submenu of the "Help" menu so they are more easily discoverable.

    • Added a document about finding files that are shadowed by a mount and a script for the most common case.

    • Bug fix: Fixed GitHub Issue #149:

      Segfault when using a cleanup action with refresh policy AssumeDeleted after a cleanup action with RefreshParent in the same directory.

    Details

    "Discover" Actions

    Added a "Discover" toplevel menu with actions to easily find

    • the largest files
    • the newest files
    • the oldest files
    • files with multiple hard links
    • broken symbolic links
    • sparse files

    in the whole displayed directory tree or, if a directory is selected, in that subtree.

    In each case, a non-modal dialog is opened with a list of the results. Clicking on one of them selects it in the main window where you can see more details and use cleanup actions.

    Most of that was already there in some way or the other, but now it's easier to discover (pun intended) and to use.

    Finding large files is of course what the treemap is primarily for; just spot large blobs and click on them to find out what they are and where they are hiding.

    Finding the newest files can also be done by sorting the tree by the "last modified" column and then opening the topmost branches. This is often useful to find out where some browser dumped that last download.

    Similarly, to find the oldest files, enable the "oldest files" tree column, sort by that and open branches until you can see a file.

    Files with multiple hard links or sparse files were mentioned in the log; otherwise they were not so easy to find (short of using the command line, of course).

    Symlinks in the Details Panel

    Now showing the target of symbolic links in the details panel.

    If it's a short path, the whole path is shown; otherwise without the path (".../somewhere"), and the full path is shown as a pop-up upon mouse click.

    If the target does not exist, a Broken Link warning is also shown.

    Menu Reorganization

    The menus had become a little too crowded, especially on the top level.

    • The new toplevel menus are now:

      • File
      • Edit
      • View
      • Go To
      • Discover
      • Clean up
      • Help

      I.e. it's down to 7 items which is generally regarded as the gold standard by usability experts.

    • The former "Settings" menu is gone; "Configure QDirStat" is now in the "Edit" menu. There was only that one action in the "Settings" menu, and that is quite wasteful in terms of screen space and toplevel menu complexity.

    • Moved out some options entirely from the menus; they are still available when editing the config file manually:

      • "Show current path"
      • "Treemap as side panel"
    • "Expand tree level" is now limited to level 5 (formerly 9). Opening that many tree branches means a huge performance drop anyway.

    • The former "Treemap" menu is now a submenu of "View". Most of those actions are available as tool bar buttons and mouse wheel operations anyway.

    Documentation

    • Added links to external documents to a new "Problems and Solutions" submenu of the "Help" menu so they are more easily discoverable.

    • Added a document about finding files that are shadowed by a mount and a script for the most common case.

    Handling Loopback Mounts

    Now ignoring the loopback mounts of installed snap packages in the "Open Directory" dialog and in the "Mounted Filesystems" window.

    Yes, each of them has a separate loop mount, even if it's only installed, not in active use. Those mounts clutter the output of commands like df or mount with nonsensical cruft:

    df -hT | grep snap
    
    /dev/loop0  squashfs  159M  159M  0 100% /snap/chromium/1244
    /dev/loop1  squashfs   55M   55M  0 100% /snap/core18/1880
    /dev/loop2  squashfs   63M   63M  0 100% /snap/gtk-common-themes/1506
    /dev/loop3  squashfs   30M   30M  0 100% /snap/snapd/8542
    
    

    (From a freshly installed Xubuntu 20.04 LTS)

    Misc

    • Enabled Refresh Selected now for files as well. In that case, the parent directory is refreshed.

    • Added hotkey [F6] for Refresh Selected.

      [F5] is still Refresh All like in all web browsers. Since window managers / desktop environments tend to consume [F5] with modifier keys ([Shift] [F5], [Alt] [F5], [Ctrl] [F5]), this is the closest we can get, and it's more consistent than using something like [Ctrl] [R].

      This was inspired by the discussion in PR#145.

    Bug Fix

    Fixed GitHub Issue #149:

    Segfault when using a cleanup action with refresh policy AssumeDeleted after a cleanup action with RefreshParent in the same directory.

    Source code(tar.gz)
    Source code(zip)
  • 1.7(Jul 26, 2020)

    Overview

    The QDirStat project proudly presents its latest release: QDirStat 1.7.

    This is a stable release. It brings a number new features and some bug fixes:

    • Closing the gap between sizes reported by QDirstat and sizes reported by the du command: Now also taking the allocated size into account.

    • Now also displaying the allocated size where it makes sense.

    • New "Mounted Filesystems" window showing output similar to the df command (but without the cruft).

    • New directory selection dialog showing all (real) filesystems.

    • New checkbox to cross filesystems (temporarily) in the directory selection dialog.

    • Workaround for NTFS oddities: Ignoring hard links on NTFS.

    • Added config option to ignore hard links in general.

    • Added a document about Btrfs free size and how different tools tend to show different values: Btrfs-Free-Size.md

    • Bug fixes

    Details

    Closing the Gap Between QDirstat and the "du" Command

    QDirStat now also takes the allocated size (the number of allocated disk blocks) into account.

    There were repeated threads on various social media where users wondered why QDirStat displayed different sizes than the du or the df commands, sometimes slightly different, sometimes off by quite a lot.

    In short, this is mostly due to the difference between a file's byte size and its allocated blocks: On most filesystem types, a file of 49 bytes still consumes a minimum of 4 KB (4096 bytes); disk space is allocated in clusters (typically 4 KB), not byte by byte. On a typical Linux root filesystem with many thousands of tiny files, this difference can add up to a lot.

    Formerly, QDirStat only added up the byte sizes, disregarding the allocated, but really unused part at the end of tiny files. The rationale was that some filesystem types handle that in more intelligent ways, yet there is no documented way to get information from a filesystem if it actually does that. It turned out that in reality, most of them don't bother; they simply let most of that last cluster go to waste.

    Now QDirStat displays both sizes where useful:

    • For tiny files, the tree view now shows both sizes: "49 B (4k)"

    • For directories, the tree view now shows the total of the allocated sizes. This may sound a bit inconsistent, but it feels very natural and intuitive: You are typically interested in how much disk space the subtree consumes, no matter if some part of that is really wasted.

    • The details view shows both sizes when there is a difference (in the displayed numeric precision): "Size: 42.1 MB" vs. "Allocated: 42.2 MB", but not "Size: 42.0 MB" vs. "Allocated: 42.0 MB".

    • Treemap tiles now correspond to a file's allocated size. This makes a real difference for tiny files.

    More details at GitHub Issue #134: Size Difference between QDirStat Reports and the "du" and "df" Commands.

    New "Mounted Filesystems" Window

    Menu "View" -> "Show Mounted Filesystems" or Ctrl-M:

    This shows information about "normal" mounted filesystems (excluding system mounts like /dev, /proc, /sys, bind mounts, Btrfs subvolumes) with usage data as reported by the filesystem itself. The "Reserved" column shows the disk space reserved for the root user on that filesystem, "Free" is the available space for non-privileged users.

    Sometimes the "Used" size reported here may be different from what QDirStat reports after reading that complete filesystem; this can be due to metadata, journals or snapshots. Notice that in those cases, the du command will also display a different value than the df command.

    New Directory Selection Dialog

    QDirStat now has its own custom directory selection dialog; it no longer uses one of the simplistic Qt standard file dialogs:

    The "Places" bar on the left shows your home directory and all "real" filesystems (the same as in the new "Mounted Filesystems" window). For each filesystem, it shows

    • The mount point
    • The total size of the filesystem
    • The filesystem type ("ext4", "btrfs", "ntfs", ...)
    • The device name ("/dev/sda2") (in a tooltip)

    In the "Path" combo box you can simply edit the path or copy and paste it from another window. Use the "Up" button to move one directory level up.

    Crossing Filesystems Temporarily

    The "Cross Filesystems" checkbox lets you temporarily override the global configuration option of the same name: QDirStat will then no longer stop when a mount point is found during reading a subtree, it will descend into that mounted filesystem and read it, too; but again, only for "real" filesystems, not for system mounts such as /dev, /sys, /proc, not for bind mounts, not for filesystems mounted multiple times, and not for network mounts (NFS, Samba / CIFS).

    More details at GitHub Issue #129.

    NTFS File Sizes and Hard Links

    Added a workaround for wrong size sums on NTFS: Now disregarding hard links on NTFS.

    The (current?) ntfs-3g implementation using fuseblk seems to disagree with Windows tools which files really have hard links.

    It appears that ntfs-3g regards even the MS-DOS compatible short filename (PROGRA~2 vs. Program Files) as a hard link which is of course utter nonsense; that means that almost all files on an NTFS partition are reported as having multiple hard links, so QDirStat displayed them as having only half their real size.

    Notice that this is a bug in ntfs-3g, not in QDirStat.

    See also GitHub Issue #88.

    Completely Ignore Hard Links

    Added a config option to ignore hard links.

    This is useful for a very small number of use cases. Hard links are not very common anymore in today's Linux / BSD / Unix-like systems, so most users won't have to bother with this at all.

    By default, QDirStat sums up the disk space for a file with multiple hard links for each hard link's share of the overall size: If a file with 1 MB has 4 hard links, for each of those 4 links QDirStat adds 1/4 of the size (i.e., 256 kB) to the parent directory. If all those 4 links are in the same directory, that's very simple: They add up to 4 * 256 kB = 1 MB, so the sum is correct.

    If those hard links are all in different directories, each directory only gets part of that disk space allocated, because in fact they share the disk space among each other; the total disk space sum taking all those directories into account is still correct, of course.

    The trouble starts when you want to make a backup of only one of those directories: Even though the disk space is still shared with other directories, on the backup medium, you still need the disk space for that complete file, i.e. the full 1 MB, not only that directory's share (256 kB). With a lot of hard-linked files, that can add up to a lot of difference between what QDirStat displays and what disk space you actually need for the backup.

    There was a user who makes heavy use of that, and for that kind of use case there is now the option to ignore hard links: In that case, QDirStat sums up the complete size (the full 1 MB) for each hard link of the file.

    While that is useful for this special case, and you can now see the total size that you will need for your backup medium for that one directory, the total size higher up in the directory tree where more than one of those directories that share hard linked files with each other is off: That file now appears 4 times with 1 MB each, so it will add up to 4 MB.

    There is now a new config option in ~/.config/QDirStat/QDirStat.conf:

    [DirectoryTree]
    ...
    IgnoreHardLinks=false
    

    This is intentionally not available in the GUI config dialog to avoid confusion; use a text editor (while QDirStat is not running) to change this setting.

    Please use that config option only when you are aware of the consequences; this is a specialized option for rare, specialized use cases. It basically makes sense only if the other hard links are all outside the subtree that QDirStat displays.

    More details at GitHub Issue #124.

    New Document about Btrfs Free Size

    There is now a new document about Btrfs free size and how different tools tend to show different values: Btrfs-Free-Size.md

    Whenever users run out of disk space on Btrfs (which happens a lot, mostly because of snapshots) and they try to figure out where all their disk space went, they are confused about different tools reporting totally different and inconsistent sizes; traditional Linux / Unix command line tools like du and df just like GUI tools like QDirStat. Hopefully, this document will shed some light on that.

    Bug Fixes

    • Fixed the internal cache writer (the one called from the File menu, not the qdirstat-cache-writer Perl script): For files with multiple hard links, it wrote the wrong size to the cache file: The result of size / links, not size.

      This was part of GitHub Issue #124.

    • Fixed crash when terminating with Ctrl-Q while reading directories (GitHub Issue #122).

    • Now automatically reopening the old current branch in the tree view when using actions like "refresh selected" and "continue reading at mount point (GitHub Issue #135).

    • Not a bug, but a minor new feature: Now automatically expanding the first directory level of a mount point after "continue reading at mount point".

    • Now correctly labelling a mount point as mount point in the "Details" panel.

    Source code(tar.gz)
    Source code(zip)
  • 1.6.1(Feb 13, 2020)

    Overview

    The QDirStat project proudly presents its latest release: QDirStat 1.6.1.

    This is a stable release. It brings some new (minor) features and one bug fix:

    • Much better handling for "permission denied" errors while reading directories.

    • Now showing the exact byte size (134 495 994 Bytes instead of 128.3 MB) upon mouse click in the tree (right click) and in the details panel (left or right click).

    • New optional tree column "Oldest File" (not enabled by default).

    • Bug fix: Support for dark widget themes in File Size Histogram window.

    Details

    Improved Handling for "Permission Denied" Errors while Reading Directories

    If you start QDirStat with insufficient permissions, you could easily overlook large subtrees in the filesystem that consume disk space, but were not visible to you. They did get a special icon, but you would have to open the parent directory in the tree view to see that.

    Now, QDirStat notifies you in several ways:

    • All parent directories that contain a subtree that could not be read are now displayed in dark red in the tree view.

    • The Size field of those directories as well as other accumulated values (Items, Files, Subdirs) are now preceded with a "greater than" sign to indicate that there is most likely more, but that information could not be retrieved: ">7.2 MB" indicating that it's at least 7.2 MB and most likely more than that, but we don't know because one or more subdirectories could not be read.

    • A message panel in the main window between the tree view and the treemap with a message that some directories could not be read.

      You can close the message with the [x] close button on its right side, but you can also simply leave it open. This is a lot less obtrusive than a pop-up dialog, yet less temporary than a message in the bottom status line that will disappear in a few seconds or when anything else is reported.

    • Clicking on the "Details..." link in that message opens a separate window to report all directories that could not be read (typically because of insufficient permissions).

      This window is non-modal, i.e. you can still interact with the main window when it is open. Click on any directory that it lists to locate it in the main window: The tree view will open that branch and scroll to make it visible.

    • In addition to the "locked folder" icon, unreadable directories are shown in bright red in the tree view.

    • When an unreadable directory is selected in the tree view, the details panel now shows a large padlock icon and a message "[Permission Denied]", and the permissions are highlighted in red.

    Exact Byte Size on Demand

    You can now see the exact size in bytes both in the tree view and in the details panel: 134 495 994 Bytes instead of 128.3 MB. The field is still (somewhat) human readable with thousands separators (using blanks to avoid confusion with different decimal / thousands separators in different languages).

    This can make it easier to compare sizes with other tools that report them in bytes or that insist in using 1000-based units (QDirStat uses 1024-based size units: 1 kB = 1024 Bytes; 1 MB = 1024 kB; 1 GB = 1024 MB; etc.).

    Not using tool tips that appear automatically was a conscious decision: This level of detailed information is not needed that often, and tool tips get in the way whenever the mouse cursor lingers too long at an active spot. More often than not a tool tip obscurs other content that the user might want to read at that very moment. This is why in QDirStat in the rare cases that you are interested in those exact numbers, you have to click:

    • In the tree view, right-click a size field (a left click is used for selecting an item in tree views, so the context menu is pressed into service for that purpose (only for the size column)).

    • In the details panel, use left or right click. To indicate what fields can be clicked, they are now underlined when the mouse hovers over them.

      Hovering over fields that can be clicked shows them underlined, very much like a hyperlink.

      Clicking (left or right mouse button) shows more details: In this case, the exact byte size.

    New Tree Column "Oldest File"

    There is now an optional new column "Oldest File" that shows the timestamp (the mtime) of the oldest file in a subtree. This is strictly about files; directories, symlinks and special files (block or character devices, FIFOs etc.) are ignored for this.

    This may be useful to spot some old cruft, for example leftover dot files in your home directory. Many programs generate such files when you start them for the first time, and they are rarely cleaned up when they fall out of use.

    Notice that this column is not enabled by default. If you would like to use it, switch to layout L2 or L3, right-click the tree header to open the columns context menu, select Hidden Columns, then Show Column "Oldest File".

    Of course you can also sort by this column to see the oldest files first (or last).

    Bug Fix

    Fixed text color in histogram in dark widget themes (GitHub Issue #117).

    Source code(tar.gz)
    Source code(zip)
  • 1.6(Jul 22, 2019)

    Overview

    The QDirStat project proudly presents its latest release: QDirStat 1.6.

    This is a stable release. It brings performance improvements, new features and some bug fixes:

    • Performance improvement while reading directories

    • Vast performance improvement for huge directories (100.000+ entries in a single directory)

    • New packages view

    • New unpackaged files view

    • New standard cleanup: Check File Type

    • Support for excluding directories containing a file with a specific name or pattern.

    • Greatly improved man page

    • Some minor bug fixes.

    Details

    Performance Improvements

    New Views

    • New packages view: QDirStat can now visualize the file lists of installed packages:

      I.e. files are now grouped by the package they belong to, and in each subtree only the files that belong to the package are displayed: In this example, in /usr/bin only the chromium-browser binary is displayed, not all the other files in /usr/bin. This is intentional.

      You can display all installed packages with their file lists (but that takes a while), or you can select just a subset. Use Menu File -> Show Installed Packages or start QDirStat with a pkg:/ command line argument.

      As with the other package manager related features, this is supported for all Linux distributions that use one of dpkg, rpm or pacman (or any higher-level package manager based on any of those like apt, zypper etc.).

      More details at Pkg-View.md.

    • New unpackaged files view:

      QDirStat can now visualize the files in system directories that are not packaged, i.e. that are not part of any file list of any installed software package.

      This can be useful to track down problems after package upgrades or after manually installing software with sudo make install.

      This is supported for all Linux distributions that use dpkg or rpm (or any higher-level package manager based on any of those like apt, zypper etc.).

      More details at Unpkg-View.md.

    Misc

    • New standard cleanup: Check File Type. This uses the file command to find out more detailed information what exactly a file is and displays it in the cleanup output window.

      More details, screenshots and how to get it if you already have an existing QDirStat cleanup configuration file (i.e. if you used QDirStat before): GitHub Issue #102.

    • Implemented GitHub Issue #90: Support excluding directories containing a file with a specific name or pattern.

      Similar to some backup tools, you can now specify an exclude rule that lets you exclude a directory that contains a file like .nobackup or .qdirstatexclude.

    • Greatly improved the man page; see man 1 qdirstat.

    • Some minor bug fixes.

    Source code(tar.gz)
    Source code(zip)
  • 1.5(Nov 7, 2018)

    Overview

    The QDirStat project proudly presents its latest release: QDirStat 1.5.

    This is a stable release following the recent 1.4.97-Beta release. It brings a number of new features as well as some bug fixes:

    • (Optional) breadcrumbs navigation

    • (Optional) a new "details" panel for the currently selected item

    • (Optional) new tree columns: owner, group, permissions both in "rwxrwxrwx" and in octal format

    • Package manager support for the major Linux package managers (dpkg / rpm / pacman) to see what package a system file belongs to.

    • Quick-switchable different layouts for the main window

    • A new "General" page in the configuration dialog

    • Show in the window title if the program runs with root permissions (sudo etc.)

    • (Optional) show the URL in the window title

    • Some bug fixes (see below)

    There were very few changes compared to the 1.4.97-Beta release. No bugs were reported against that Beta.

    Details

    Main Window

    Breadcrumbs Navigation (Optional)

    Above the directory tree there is now a breadcrumbs navigation widget.

    This shows the current path with each component a clickable link so you can easily go up the tree - up to the top of the tree that you started QDirStat with.

    You can switch this on and off with View -> Show Current Path.

    The New "Details" Panel (Optional)

    On the right side of the tree there is now a "Details" panel showing information about the currently selected item, or, if multiple items are selected, about the sum of them all.

    You can switch this on and off with View -> Show Details Panel.

    What information is dispayed depends on the type of the selected item:

    • File:

      • File name (without path)
      • Type (file / symlink / block device / character device / FIFO)
      • MIME Category (Documents / Images / Videos / ...) as defined for the treemap colors (see MIME Categories in the configuration dialog).
      • Size
      • A notification if this is very likely a system file, i.e. a file owned by a user ID < 500 and in a known system directory like /bin, /dev, /etc, /lib, /opt; /usr, but not /usr/local; etc.
      • For system files: The software package that it belongs to, if known (see below)
      • User (file owner)
      • Group
      • Permissions in both "rwxrwxrwx" and octal ("0777") format
      • Date and time of last modification (mtime)
    • Directory:

      • Subtree information: Total size, items, files, subdirectories; date and time of the last modification anywhere in that subtree
      • Information about the directory itself: Size of the directory itself without the subtree, user, group, permissions; date and time of the last modification of the directory (which might be less recent than the last modification of any file anywhere in the subtree).
    • Files pseudo directory:

      Similar to directory, but only the subtree information since there is no counterpart to this object on disk; it just serves to collect the direct file children of the directory.

    • Multi-selection:

      • Total size of all selected items including any subtrees
      • Number of directly selected files (without subtrees)
      • Number of directly selected directories (without subtrees)
      • Total number of files in all selected subtrees

    Package Manager Support

    If a file is identified as a system file and a supported package manager is detected on the system, QDirStat now queries the package manager what software package the file belongs to and displays that information in the new "Details" panel.

    This gives a surprising amount of insight where all the disk space on the system directories goes to, most importantly some of the big blobs in the tremap.

    Currently, QDirStat supports the most common Linux package managers: dpkg, rpm, pacman.

    Please notice that higher-level package managers such as apt, zypper, yum or front-ends like synaptic, PackageKit all use one of those lower-level package managers internally, so even if you normally only use one of those higher-level package managers, it still works without any restriction.

    That means that QDirStat currently supports this feature for:

    • Debian
    • Ubuntu / Kubuntu / Xubuntu / Lubuntu
    • SUSE (openSUSE Tumbleweed or Leap, SLES)
    • Red Hat (Fedora, RHEL)
    • Arch Linux
    • Manjaro

    ... and dozens more; basically all that are based on any of the above.

    This feature works by running dpkg -S, rpm -qf or pacman -Qo as external commands, so this is a somewhat expensive operation. To keep the user interface responsive, QDirStat now has an "adaptive timer" for updating that information: Normally, the result is shown instantly, but if you click around wildly, there is a timer that is increased or decreased (thus "adaptive") for a delayed update after that timeout (0 / 333 / 1000 / 2500 millisec right now).

    It can even handle rpm installed as a foreign package manager on a dpkg based system (and the other way round); it tries the primary package manager first, then any others that are also installed.

    Support for BSD systems (FreeBSD, OpenBSD) was also planned, but it turned out that currently the package managers of those systems only know what package owns files of ports / 3rd party, not for the base system, so this feature might not be very useful on those systems.

    Unified Size Columns

    In the tree there used to be separate colums for total size and own size; this is now unified to only one size column. Own size was really mostly useful for directories where the directory itself has a size, and then there are all its children in the subtree. But that information (which is only rarely useful anyway) is available in the "Details" panel, so it no longer makes much sense to consume so much screen space with that separate column.

    New Tree Columns (Optional)

    This was the result of GitHub issue #80: Show owner and group in the tree.

    The directory tree view can now display those additional columns:

    • User (file owner)
    • Group
    • Permissions in "rwxrwxrwx" format
    • Permissions in octal ("0777") as used for the chmod command.

    Remember that you can hide or show tree columns in the tree by using the context menu in the tree header: Right-click on any header in the tree. You can also rearrange columns by dragging them where you want them - with the exception of the Name column which always remains at the left edge.

    Switching Layouts

    Since the new columns consume so much screen space and they are only useful in certain situations, but in others the details panel is so much more useful, it is now possible to quickly switch between three different layouts for the upper half of the main window.

    • Layout 1 (short): Display only a bare minimum of columns in the tree view, but show the new details panel on the right side. This is to minimize clutter in the tree view, yet keep all the information available.

    • Layout 2 (classic): Display the same columns as always in the tree view and additionally the new details panel on the right side.

    • Layout 3 (full): Display all available columns in the tree view, including the new file owner, group, permissions in both "rwxrwxrwx" and octal. But don't display the new display side panel so there is enough screen space to show all those columns.

    Switching between the layouts is as easy as pressing one of the three new buttons in the tool bar: L1, L2, L3. Or use the corresponding entries in the "View" menu. Or use the Alt-1, Alt-2, Alt-3 key combinations.

    For each view, you can individually configure what columns to display and whether or not to display the new details side panel and / or the new breadcrumbs navigator.

    The column widths are still configured globally (and this will remain like that); after some experiments, it turned out that it is very awkward to have to set all of them individually for each layout.

    New "General" Configuration Dialog Page

    This is a bit unorganized (as might be expected for misc settings), but those misc settings had accumulated over time, so it was about time to finally add such a page.

    The settings were always accessible, but only by editing the config file (~/.config/QDirStat/QDirStat.conf) manually. For some settings you might still have to do that: Some are too exotic for general use, some others would confuse the average user much more than they would help.

    Information in the Window Title

    • QDirStat now shows [root] in the window title if it is running with root privileges.

    • If enabled in the new General configuration page, QDirStat can now show the URL in the window title, i.e. the path of the toplevel directory that it was started with. (GitHub issue #77).

    New Application Icon

    Noah Davis (noahdvs) contributed a new application icon for QDirStat:

    The old icon goes back to early 2000 for the first KDirStat 0.86 release. It was never a masterpiece, but the new application just needed an icon. Finally somebody with more artistic talent than myself made one that looks a lot more professional. Thank you, Noah!

    Bug Fixes

    • Fixed GitHub issue #84: Crash if picking up a cache file in the starting directory (subtree root)

    • Fixed GitHub issue #74: Crash deleting folder while scan is in progress

    • Fixed GitHub issue #72: Allow to specify install prefix (e.g. /usr/local instead of /usr)

    • Fixed duplicate keyboard shortcut for actions "Stop Reading" (now: Ctrl-S) and "Copy URL to Clipboard" (still Ctrl-C).

    • Fixed exclude rules not matching correctly against direct root directory children: A rule that should match "/var" now works correctly. You'd need to specify "//var" in the rule which of course was wrong.

    • Now only adding the default exclude rule ".snapshot" once. If you remove that one, it should no longer keep reappearing if there are no other exclude rules.

    • Fixed some minor issues in the exclude rule configuration dialog with some widgets not being correctly disabled if they made no sense to use.

    • Now restoring the file owner of the QDirStat configuration files (~/.config/QDirStat/*.conf) after running with sudo on systems where the sudo command still uses the user's home directory (all Ubuntu versions): They used to be owned by root after sudo qdirstat, so the user could not write to them anymore, so all configuration changes (including window size and positions) were silently discarded.

    Donations

    QDirStat is Free Open Source Software. You are not required to pay anything. Donations are most welcome, of course.

    If you like, you can donate via PayPal (freely select the amount to donate):

    paypal

    Source code(tar.gz)
    Source code(zip)
  • 1.4.97-Beta(Oct 26, 2018)

  • 1.4(Jun 4, 2017)

    Overview

    The QDirStat project proudly presents its latest release: QDirStat 1.4.

    This release brings a number of new features as well as some bug fixes:

    • File size statistics window with histogram

    • Filling the gaps in the treemap (directories with lots of small files)

    • Checked code with Coverity and fixed all issues it pointed out

    • Improved support for file and directory names with UTF-8 special characters (Qt 4 only issue)

    • Improved support for directories that have read, but not execute permissions

    Details

    New Features

    File Size Statistics Window with Histogram

    File Size Histogram Screenshot

    This is a whole new kind of statistics in QDirStat showing how file sizes are distributed. You can start that for any selected directory (menu View -> File Size Statistics or F2) or from the File Type Statistics window if you select any filename suffix (extension) there and then File Type -> Size Statistics (or F2). In the latter case, you can see how large all your photos (.jpg), your videos (.mp4) or whatever are.

    This new statistics window deals with a lot of things you might have come to hate at school or at university, and which your math teacher or your statistics professor never explained in a way that mere mortals can understand, so there are explanations of those things as a bonus. There is a landing page for that in that new window:

    File Size Help

    Or you might use this as a starting point.

    Everybody thinking "I have no clue what this is all about", please have a look at the Median, Quartiles and Percentiles Explained document to convince yourself that really everybody can easily understand this.

    There is also a GitHub issue to discuss this; comments are welcome. Feel free to reopen this for any discussions about that topic.

    Filling the Gaps in the Treemap

    GitHub issue #58 shows that users feel under-informed when there are grey areas in the treemap. The explanation is simple: Treemap tiles are only displayed when they have at least a certain minimum size (by default 3 pixels). Otherwise the treemap just gets cluttered with tiny things that don't show any information whatsoever.

    The remaining space is taken by its parent directory's tile. They were rendered just flat grey which makes their boundaries against each other invisible, thus giving the impression that there is nothing.

    So there were some experiments with visible borders, but that completely destroyed the visual impression of the treemap because those borders were everywhere. Fill patterns also didn't help: They were just ugly, and there was no way to tell where one directory tile ends and where the next one starts.

    The next approach was using gradients. The first impression was good, but then it turned out that it was hard to tell which item was a (now over-emphasized) directory and which one a large file. Locating large files deep inside the directory hierarchy is the major strong point of the treemap visualization, so giving that up did not seem like a smart idea. After playing a bit with the gradient parameters (toning it down and giving it just a little blueish tint) this was the result:

    Using Gradients

    This appears to be a good compromise.

    Of course this is configurable: Edit ~/.config/QDirStat/QDirStat.conf:

    [Treemaps]
    ...
    DirGradientEnd=#707080
    DirGradientStart=#606070
    ...
    UseDirGradient=true
    

    Beware that QSettings sorts the entries alphabetically, so the start is after the end (how philosophical...).

    Bugfixes

    • Fixed problem with directories that have read, but not execute permissions thanks to slodki:

      In that case, you'd get a warning in the log for every entry in such a directory, and it would get the wrong icon (a locked folder) and null values for all fields. Now checking for execute and read permission of the directory in advance and not even trying to read any contents (because the values would be bogus anyway).

    • Fixed GitHub Issue #61: Files and directories with UTF-8 special characters in the name not read correctly when built with Qt 4.x

      This happened only when QDirStat was built against Qt 4.x, but that is the default for NHellFire's PPA, so this affects all Ubuntu users who installed QDirStat from that PPA.

      Thanks to slodki who pointed this problem out!

    Other Improvements

    • Checked code with Coverity

      Coverity offers free static code analysis for Open Source projects. This is really an outstanding tool, and it does a really thorough analysis.

      You might be glad to hear that while it complained about some minor things, there was not a single issue that would have been user relevant (let alone any security problems - there were none). Still, I did my best to fix the small complaints it had, and now we are down to zero outstanding defects reported by Coverity in QDirStat's 130,000 lines of code.

    • More consistency between file type and size statistics

      Like the new file size statistics window, the older file type statistics window now uses the currently selected directory (in the tree view), not always the tree's toplevel directory. If nothing is selected, it still uses the toplevel directory.

      That means that F3 no longer toggles that window, but re-populates it with the currently selected directory instead. This is consistent with the F2 view.

      Of course, the "Locate Files by Type" window now is also restricted to that subtree which actually gives it better functionality if you know that you want to locate files only there.

      This means that you can now select a subdirectory in the tree, open the file type statistics for it (F3 key), then select any filename extension (suffix) in that window and then open the file size statistics (F2 key) for that file type in that subtree.

      Previously, you would have to start QDirStat to show only that directory, then open the file type statistics window (F3), then the file size statistics window (F2) from there.

    Source code(tar.gz)
    Source code(zip)
  • 1.3(Mar 5, 2017)

    Overview

    The QDirStat project proudly presents its latest release: QDirStat 1.3.

    This release brings a number of new features as well as some bug fixes:

    • File type statistics window

    • Locate files per directory by file type

    • Display path and size of the current item in the status line while hovering over a treemap tile

    • Optional alternate layout of the main window: Tree view and treemap side by side

    • Improved logging: More secure and rotating logs

    • New document: QDirStat for Headless Servers for server admins

    • New document: The GitHub Workflow for developers

    Details

    New Features

    File Type Statistics Window

    People who know WinDirStat inevitably want its File Type view in QDirStat, too. I was really reluctant to do that because I didn't quite see the point; in WinDirStat, it serves mostly as a legend to the treemap colors since they are constantly changing in WinDirStat: The file type that consumes most disk space always gets color #1, the next-most color #2 etc., so it depends which directory you scan what color each file type gets. In QDirStat, the colors are stable; they are predefined and configurable in the MIME Type Categories configuration dialog.

    And as most of you probably know, filename extensions have a much stricter meaning in Windows than on Linux/Unix systems; Linux people get very creative when it comes to using dots in filenames. Sometimes those dots delimit a filename's extension (suffix) from its base name, sometimes they are used for entirely different purposes.

    But there was one user who was insistent enough to make me reconsider and convinced me with valid use cases for this, and after some experimenting I found an approach that works for QDirStat -- both technically and in terms of usability:

    File Type Statistics Window Screenshot

    So it's not just a flat list of filename extensions (suffixes); rather, they are sorted into their respective MIME categories (yes, the ones you might know from the Treemap Colors config dialog) where appropriate and Other for everything that doesn't fit into a known category.

    See the whole discussion with more screenshots at GitHub issue #45.

    Limitations

    Since filename extensions (suffixes) don't have as much semantics in Linux/Unix systems as they do in Windows, many files are categorized as "Other". This is a known limitation, but it's a limitation of the whole concept of using suffixes to categorize files by type. And no, checking file headers for magic byte sequences like the "file" command does is not an option here; QDirStat would have to do that for (at least) all the 30,000+ files typically listed under the "Other" category.

    So we'll have to live with that limitation. More exactly, everybody will have to live with this; I will not spend hours upon hours anymore explaining that same thing to the umpteenth user demanding this to be more sophisticated.

    This will also not become part of the main window (as was suggested before) because it just takes up too much space, and it would clutter the main window too much; See also GibHub issue #52 and GitHub issue #51.

    Locating Files by Type

    Locating FilesWindow

    You can now locate files with a specific filename extension directly:

    • You select a file type (a filename extension) in the "File Type Statistics" window.

    • You click "Locate" or you double-click the item.

    • The "Locate Files" window opens.

    • You click a directory there.

    • In the main window, the branch for that directory opens, and all matching files are selected in the tree view and in the treemap.

    • You can now directly start cleanup actions for those files.

    See also GitHub issue #48.

    The File Type Statistics and the Locate window are both non-modal, i.e. you can still work in the QDirStat main window while they are open, and they both remember their size and position so you can arrange them on the screen to have everything visible at the same time that you need to see.

    Improved Logging

    Logging is now more secure, and the logs are automatically rotated, so there is no longer one large log file that keeps growing and growing.

    QDirStat now uses its own log directory /tmp/qdirstat-$USER (where $USER is your user name; the numeric user ID is now only used if the user name cannot be obtained). It no longer keeps one single log file growing, but starts a new one each time it is started. 3 old logs are kept; any older ones are deleted.

    The permissions for that directory are set up in a pretty restrictive way (0700, i.e. rwx------) when it is created. If it already exists, QDirStat checks the owner and creates a new one with a random name if it is owned by anyone else than the user who started QDirStat.

    [sh @ balrog] ~ 68 % ls -ld /tmp/qdirstat-sh
    drwx------ 2 sh sh 4096 Feb 24 18:29 /tmp/qdirstat-sh
    [sh @ balrog] ~ 69 % ls -l /tmp/qdirstat-sh
    total 16
    -rw-rw-r-- 1 sh sh 2067 Feb 24 18:29 qdirstat-00.old
    -rw-rw-r-- 1 sh sh 2067 Feb 24 18:07 qdirstat-01.old
    -rw-rw-r-- 1 sh sh 2067 Feb 24 18:07 qdirstat-02.old
    -rw-rw-r-- 1 sh sh 2067 Feb 24 18:29 qdirstat.log
    

    For anybody regularly watching the log file this means they will now have to use tail -F qdirstat.log rather than tail -f since the latter does not realize when the file it watches is renamed and a new one is created under the same name.

    Other New Features

    • Implemented GitHub issue #30:

      When hovering over a treemap tile, display the full path and the total size of that element in the status bar. When the hover ends (when the mouse cursor leaves the treemap tile), display the current selection again in the status bar.

    • Optional alternate layout for the main window: You can now switch from the traditional layout of tree view above and treemap below to a side-by-side layout with the tree view on the left and the treemap on the right (Menu Treemap -> Treemap as Side Panel).

      This was contributed by @flurbius.

    New Documents

    • QDirStat for Headless Servers

      This document explains step by step how to use the qdirstat-cache-writer Perl script to collect data on your headless (without X server, without X libs) server somewhere in a rack in a data center and display the data on your local workstation machine with QDirStat.

      This information has been out there for at least 10 years, but still people keep asking that on sites like stackexchange.com and superuser.com; I lost count how many times I answered it. And still people come up with the most crazy and arcane command lines to do a shitty job for the same problem when they could also have the good solution.

    • The GitHub Workflow

      This document is a step-by-step instruction guide how to collaborate with projects such as QDirStat (but also other Open Source projects) with GitHub and git with upstream repositories and your personal fork and local working copies; how to set it up, how to fetch and rebase, how to work with pull requests and getting your merged contributions from upstream back to your fork.

      I wrote that when I caught myself explaining that in great detail in a pull request comment; I thought that might be useful for a lot more people out there. So here it is.

    Bugfixes

    • Fixed GitHub issue #24:

      During directory reading, subdirectories would get out of sync when opening a tree branch.

      It looks like QDirStat's tree display was a bit too dynamic for the concepts of the underlying Qt classes (QTreeView / QAbstractItemModel): During reading, QDirStat would sort the tree by the number of pending read jobs. That number is constantly changing, so the sort order would also constantly need to change. This is very hard to do properly with the limitations those underlying classes impose; basically it would require a reset of all the data the QTreeView keeps, thus making it forget things like its current scrollbar position or which tree branches were expanded or collapsed. That would make the user interface pretty much unusable.

      So the fix for this is to not sort by read jobs, but by directory names instead since they don't change all the time. The user can still sort by any other column, but that sort is a momentary thing that might become invalid moments later as data (accumulated sizes, number of child items) are updated. Everybody please notice that this is a known limitation and any complaints about that will flatly be rejected. The alternative would be to not allow the user to sort at all during directory reading, and that is certainly a lot less desirable.

    • Fixed GitHub issue #54:

      Crash with cleanup action with "Refresh Policy: Refresh this item" when more than one file item was selected.

    • Fixed crash upon refresh when deleting the toplevel directory via cleanup.

    Acknowledgements

    This release was supported by my employer SUSE Linux GmbH with the SUSE Hack Week where R&D people are free to spend one whole working week on their favourite Open Source projects. SUSE does this roughly every 6-8 months to support the Open Source movement.

    About one third of my time working on this release was covered by the Hack Week.

    Source code(tar.gz)
    Source code(zip)
  • 1.2(Jan 3, 2017)

    Release Announcement

    The QDirStat project proudly presents its latest release: QDirStat 1.2.

    This release is focused on Btrfs improvements, so upgrading to this release is highly recommended for Btrfs users:

    If you used QDirStat to scan a Btrfs partition, any subvolumes of that partition were not scanned (see GitHub issue #39).

    Btrfs subvolumes were treated just like ordinary mount points (which, to all intents and purposes, they are). So you might have wondered why the df command shows your 40 GB root filesystem as 97% full, yet QDirStat shows only about 7 GB. The rest might be hidden in subvolumes.

    QDirStat stops reading at mount points - which only makes sense because normally you want to know what eats up the disk space on that one partition that is filling up, not on any others like /home that are mounted there. Unfortunately, a Btrfs subvolume is also just another mount point, and QDirStat would stop reading there, too - at /var/log, at /var/spool, at /var/lib/libvirt etc.; a typical Btrfs root filesystem has about a dozen subvolumes, and all files in them were disregarded by QDirStat.

    This is now fixed: Despite Btrfs doing its best to make this difficult (using one single privileged system call for all its functionality, including simple info calls), QDirStat now detects if a mount point is a Btrfs subvolume and continues reading if it is. QDirStat uses /proc/mounts (or, if this is not available, /etc/mtab) to find this out.

    This is fixed in the qdirstat-cache-writer script, too.

    Other Changes

    • Bernhard Walle contributed some patches for MacOS X support. Thanks, Bernhard!

    • Fixed GitHub issue #40: Crash without useful error message when no display available

      When ssh'ing without -X to a remote machine and starting QDirStat there, it would just dump core and not issue any meaningful message. The fatal error message was only in the log file:

      <ERROR> :0 (): QXcbConnection: Could not connect to display

      Now this message is also repeated on stderr, and in this particular case ("Could not connect to display"), it does not dump core any more, but just exits with error code 1.

    About QDirStat

    QDirStat is a graphical application to show where your disk space has gone and to help you to clean it up.

    This is a Qt-only port of the old Qt3/KDE3-based KDirStat, now based on the latest Qt 5. It does not need any KDE libs or infrastructure. It runs on every X11-based desktop on Linux, BSD and other Unix-like systems.

    QDirStat has a number of new features compared to KDirStat. To name a few:

    • Multi-selection in both the tree and the treemap.
    • Unlimited number of user-defined cleanup actions.
    • Properly show errors of cleanup actions (and their output, if desired).
    • File categories (MIME types) and their treemap color are now configurable.
    • Exclude rules for directories are easily configurable.
    • Desktop-agnostic; no longer relies on KDE or any other specific desktop.

    Target Platforms

    • Linux
    • BSD
    • Unix-like systems

    Target Audience

    • System administrators
    • Advanced users
    • Interested users who are not afraid of learning new things

    Screenshots

    Main Window Screenshot

    Main window screenshot - notice the multi-selection in the tree and the treemap

    Cleanup Action Output Screenshot

    Screenshot of output during cleanup actions. Of course this window is purely optional.

    Cleanup Action Configuration Screenshot

    Screenshot of cleanup configuration.

    MIME Categories Configuration Screenshot

    Screenshot of MIME category configuration where you can set the treemap colors for different file types (MIME types), complete with a real treemap widget as preview.

    Exclude Rules Configuration Screenshot

    Screenshot of the exclude rules configuration where you can define rules which directories to exclude when reading directory trees.

    More Information

    https://github.com/shundhammer/qdirstat

    Source code(tar.gz)
    Source code(zip)
  • 1.1(Oct 31, 2016)

    Release Announcement

    The QDirStat project proudly presents its latest release: QDirStat 1.1-Pumpkin.

    This is mostly a bug fix release with some small features thrown in.

    It was about time for another official release to get the accumulated fixes and small changes out into the world. Since the release day was Halloween, this release is named Pumpkin .

    The last stable release, V1.0, was in mid-May (2016-05-16). Since then, there were 5 bug fixes and one small feature (the config file split up into independent parts so admins can provide presets to their users without overwriting the complete configuration), all described in greater detail below.

    Changes

    • Fixed GitHub issue #32: %p does not escape single quotes properly

      If you have a file name like Don't do this.txt (with a quote character in the name), the shell used when executing a cleanup action with this would complain about unmatched single quotes.

      QDirStat had always escaped such single quotes, but not the way common shells (Bash, Zsh) expect it: They don't want a backslash in front of that embedded single quote. Rather, you need to terminate the string with a single quote, escape the embedded quote with a backslash (or put it into double quotes), and then re-open the old string with another single quote.

      Thus, 'Don't do this' becomes 'Don'\''t do this'.

      This is certainly not what most people expect. I just wonder how much other software is out there that does it the intuitive (yet wrong) way: Just escape the single quote with a backslash ('Don\'t do this').

      Of course, such file names should be avoided entirely, but you can't help some slightly broken MP3 ripper program doing it, so it needs to be handled correctly.

    • Fixed GitHub issue #31: Segfault with cleanup action while reading directories

      Now disabling cleanups that have a refresh policy other than "No Refresh" while directory reading is in progress; otherwise the re-read when the cleanup action has finished clashes with the directory read already in progress.

      This is not an optimal solution, but a very pragmatic one; the optimal solution might queue updates and execute them after the main read is done.

    • Fixed GitHub issue #33: Added command line option --slow-update (or -s) for slow remote X connections.

    • Fixed GitHub issue #23:

      The internal cache writer would sometimes generate incorrect cache files because of buggy URL escaping resulting in an empty file name and thus invalid cache file syntax. This affected file names with colons (which is weird, but legal).

      One of these days I'm going to throw out all that QUrl stuff and replace the few things that I need with something that actually works consistently and not just under optimum conditions.

    • Fixed GitHub issue #22:

      Cache files containing the root file system would not display correctly or segfault under certain conditions. This is now fixed.

    • Added "Refresh All" action to the main window tool bar. I had consciously avoided that because it's just too tempting to re-read the complete directory tree rather than think about what actually might have changed and then refresh just that, but it has become so common to use that action in web browsers that I found myself missing that more and more. And re-reading is not that expensive on today's mainstream PCs.

    • Fixed GitHub issue #21:

      When started from a desktop menu, i.e. without any command line parameters, QDirStat would not prompt for a directory to read, but read the current directory (typically the user's home directory) right away.

    • More graceful handling for nonexisting paths specified on the commmand line: It now no longer just throws an exception right after starting the program (which looks like a crash to the unwary user), but posts an error popup instead and then asks for a directory to read.

    • Split up config file into four separate ones below ~/.config/QDirStat:

      • QDirStat.conf
      • QDirStat-cleanup.conf
      • QDirStat-exclude.conf
      • QDirStat-mime.conf

      This should make it much easier for site administrators to provide their own site-wide cleanup actions, exclude rules, or MIME categories. I did this with this in mind:

      http://moo.nac.uci.edu/~hjm/kdirstat/kdirstat-for-clusters.html

      Here, they describe how users should overwrite their KDirStat config file with one provided by the site admin so all users have those carefully crafted cleanup actions. But that also means that all other settings get lost each time there is a change in any of those commands, and users have to update that config file again.

      With the latest change, it is now possible to only replace the cleanup action config (QDirStat-cleanup.conf) and leave everything else untouched.

      Notice that this is far from a perfect solution; all cleanup actions the user added himself still get lost. But doing this perfectly might pretty quickly become an overengineered solution that would be hard to understand for everybody.

      As for migration from previous single-file configurations, QDirStat does that automatically: It reads the single file and moves the respective parts where they belong. No need to bother with any migration scrips or anything like that.

    Source code(tar.gz)
    Source code(zip)
  • 1.0(May 16, 2016)

    Release Announcement

    The QDirStat project proudly presents its first official stable release: QDirStat 1.0.

    In terms of source code, there were very little changes from the last Beta (0.98-Beta3 from 2016-04-08) and no real code change (only the version number increased) from the last check-in from 2016-04-11.

    This version can really be considered stable in the truest sense of the word. It was not rushed out the door, and there were no hectic last minute changes. It is well tested, and the community had ample opportunity to report any problems.

    More Information

    https://github.com/shundhammer/qdirstat

    Source code(tar.gz)
    Source code(zip)
  • 0.98-Beta3(Apr 8, 2016)

    QDirStat 0.98-Beta3

    Changes

    • Fixed GitHub issue #15:

      After a cleanup action is executed that needs refreshing the affected subtree, the parent directory is selected, which is intentional so the user's focus is not thrown off completely. There was a bug when you selected an item in the treemap afterwards, that change was not correctly propagated to the internal selection model: The parent directory remained selected (which was wrong), and the newly selected item was just added to the selection, i.e. that item and (typically) its parent directory was selected. When a potentially dangerous cleanup operation was now started, it would affect not only that item, but also the directory; and, worse, that directory often went out of the visible scope of the tree view. Yes, the confirmation popup would ask for both of them, but you all know how quickly users click away those popups without really reading them. This bug is now fixed.

    • Improved the confirmation popup. Now highlighting directories much more if there is a "mixed" selection, i.e., both directories and non-directories are selected at the same time:

      New cleanup confirmation popup

    Source code(tar.gz)
    Source code(zip)
  • 0.92-Beta2(Mar 20, 2016)

    QDirStat 0.92-Beta2

    After 6 weeks of Beta 1, Beta 2 of QDirStat is now released.

    Changes

    • Minor fixes
    • Documentation updates
    • Support for Debian and Ubuntu packaging contributed by Nathan Rennie-Waldock
    • Links to Nathan's Ubuntu PPA for QDirStat
    Source code(tar.gz)
    Source code(zip)
  • 0.86-Beta1(Feb 13, 2016)

    QDirStat 0.86-Beta1 announced

    The QDirStat authors proudly present the first official public release of QDirStat, the brand new KDirStat replacement without any KDE dependencies.

    Target Platforms: Linux, BSD, Unix-like systems

    https://github.com/shundhammer/qdirstat

    QDirStat is based on the code of the KDE 3 based KDirStat. It is an 80% rewrite, now based on the latest Qt5. QDirStat has a number of new features compared to KDirStat. To name a few:

    • Multi-selection in both the tree and the treemap.
    • Unlimited number of user-defined cleanup actions.
    • Properly show errors of cleanup actions (and their output, if desired).
    • File categories (MIME types) and their treemap color are now configurable.
    • Exclude rules for directories are easily configurable.
    • Desktop-agnostic; no longer relies on KDE or any other specific desktop.
    Source code(tar.gz)
    Source code(zip)
Owner
Stefan Hundhammer
Stefan Hundhammer
Qt without moc: set of macros to use Qt without needing moc

About This (header-only) library can be used to create an application using Qt, without the need of the moc (MetaObject Compiler). It uses a different

Woboq GmbH 584 Jan 2, 2023
WebKitGTK adblock extension with Brave's Rust-based adblock engine for backend.

BlocKit WebKitGTK adblock extension with Brave's Rust-based adblock engine for backend. Features Network and cosmetic filtering Supports Adblock Plus

Samuel Dudík 47 Dec 17, 2022
[WIP] Demo of a minimal but functional Dawn-based WebGPU client and server

dawn client-server example The goal of this demo is to create a minimal but functional Dawn-based WebGPU client and server with the following traits:

Rasmus 16 Sep 19, 2022
Modern Window Sitter for X11 based Desktop Environments

Modern Window Sitter for X11 based Desktop Environments (Coming to Wayland, Windows and Mac soon-ish). But using with a terminal emulator is recommended.

Antony Jr 40 Nov 30, 2022
Library for writing text-based user interfaces

Termbox for RT-Thread 中文说明文档 This repository forks from nullgemm/termbox_next Getting started Termbox's interface only consists of 12 functions: tb_in

Meco Jianting Man 5 May 25, 2022
HoI4 Modding Tool That Does It All! Now with a QT based GUI, all your work wil be easier!

Kadaif - HoI4 Modding Tool Kadaif is a cross-platform tool meant to help you make mods for Hearts of Iron IV. With VSCode and all it's extensions, man

null 1 Dec 14, 2022
ImTui: Immediate Mode Text-based User Interface C++ Library

ImTui is an immediate mode text-based user interface library. Supports 256 ANSI colors and mouse/keyboard input.

Georgi Gerganov 2.1k Jan 1, 2023
My color picker in GTK, based very heavily on the MS Powertoys color picker

My color picker in GTK, based very heavily on the MS Powertoys color picker

contribuewwt 12 Dec 2, 2022
Latte is a dock based on plasma frameworks that provides an elegant and intuitive experience for your tasks and plasmoids.

Latte is a dock based on plasma frameworks that provides an elegant and intuitive experience for your tasks and plasmoids. It animates its contents by using parabolic zoom effect and trys to be there only when it is needed.

KDE GitHub Mirror 1.4k Jan 7, 2023
Fishui - CutefishOS GUI library, based on Qt Quick.

FishUI FishUI is a GUI library based on QQC2 (Qt Quick Controls 2), every Cutefish application uses it. Features Light and Dark Mode Borderless window

CutefishOS 200 Dec 30, 2022
NodeEditor is conceived as a general-purpose Qt-based library aimed at graph-controlled data processing

Purpose NodeEditor is conceived as a general-purpose Qt-based library aimed at graph-controlled data processing. Nodes represent algorithms with certa

Dmitry Pinaev 2.1k Dec 26, 2022
Immediate mode 3D gizmo for scene editing and other controls based on Dear Imgui

ImGuizmo Latest stable tagged version is 1.83. Current master version is 1.84 WIP. What started with the gizmo is now a collection of dear imgui widge

Cedric Guillemet 2.3k Dec 27, 2022
Window and GUI system based on Dear ImGui from OCornut

ImWindow Window and GUI system based on ImGui from OCornut. Include docking/floating window, multi window and multi render support. Platform Actually

Thibault Hennequin 715 Dec 20, 2022
Skia-based C++ UI framework

UI framework that uses Skia as a low-level drawing toolkit. It uses the newest features of the C++ Standard library (currently targetting C++17).

null 325 Dec 14, 2022
Original hVNC has been recoded to work with all version of windows above XP. Thanks to the original author for this wonderful tool.

hVNC - Recoded This is the recoded version of the hVNC found in TinyNuke trojan. Compiling Compile tested with Visual Studio 2017. No compile errors.

Snow Leopard 8 Jan 22, 2022
✔️The smallest header-only GUI library(4 KLOC) for all platforms

Welcome to GUI-lite The smallest header-only GUI library (4 KLOC) for all platforms. 中文 Lightweight ✂️ Small: 4,000+ lines of C++ code, zero dependenc

null 6.6k Jan 8, 2023
Python Inference Script is a Python package that enables developers to author machine learning workflows in Python and deploy without Python.

Python Inference Script(PyIS) Python Inference Script is a Python package that enables developers to author machine learning workflows in Python and d

Microsoft 13 Nov 4, 2022
This is a simple tool for automatically changing accent color based on wallpaper for kde plasma.

kde-plasma-adaptive-wallpaper-accent-color This is a simple tool for automatically changing accent color based on wallpaper for kde plasma. How to use

Tanbir Jishan 8 Mar 3, 2022