Batch Sort Folders by Size With Linux DU


Use Linux DU to batch check and sort folder sizes in Linux.
You can also use Linux DU command on a Windows share or a NAS CIFS/NFS share.

Linux DU

Our users Home directories are placed in /u/
We then have groups for different users like “admins”,”students”: /u/students/USERNAME

I needed a script that creates a Text file with a Size sorted list of folders so I can check for Quota oversize.
NetAPP sort is not comfortable enough to use as it sorts by the first letter and not by actual size.
For example: NetAPP sort – 200,20,2,100,10,1 vs Needed sort 200,100,20,10,2,1.

So I have mounted the NFS share exported by the NetAPP and I use Linux DU command to scan and sort folders:

[code lang=”bash” inline=”yes”]

echo “Getting Quota Sizes”


rm -rf $logfile

for group in `ls /u/`;
for i in `ls /u/$group/`;
if [ $i != “Expired” -a $i != “MOVED” -a $i != “.snapshot” ] ;
echo “Getting $group/$i Folder Size”
du -s /u/$group/$i/ >> $logfile
echo “Sorting Results”
sort -k1 -n -r $logfile >> $logfile.txt
rm -rf $logfile
echo “Done !!”

Linux DU Command Switches

[code lang=”bash” inline=”yes”]
Usage: du [OPTION]… [FILE]…
or: du [OPTION]… –files0-from=F
Summarize disk usage of each FILE, recursively for directories.

Mandatory arguments to long options are mandatory for short options too.
-a, –all write counts for all files, not just directories
–apparent-size print apparent sizes, rather than disk usage; although
the apparent size is usually smaller, it may be
larger due to holes in (`sparse’) files, internal
fragmentation, indirect blocks, and the like
-B, –block-size=SIZE use SIZE-byte blocks
-b, –bytes equivalent to `–apparent-size –block-size=1′
-c, –total produce a grand total
-D, –dereference-args dereference only symlinks that are listed on the
command line
–files0-from=F summarize disk usage of the NUL-terminated file
names specified in file F;
If F is – then read names from standard input
-H equivalent to –dereference-args (-D)
-h, –human-readable print sizes in human readable format (e.g., 1K 234M 2G)
–si like -h, but use powers of 1000 not 1024
-k like –block-size=1K
-l, –count-links count sizes many times if hard linked
-m like –block-size=1M
-L, –dereference dereference all symbolic links
-P, –no-dereference don’t follow any symbolic links (this is the default)
-0, –null end each output line with 0 byte rather than newline
-S, –separate-dirs do not include size of subdirectories
-s, –summarize display only a total for each argument
-x, –one-file-system skip directories on different file systems
-X, –exclude-from=FILE exclude files that match any pattern in FILE
–exclude=PATTERN exclude files that match PATTERN
–max-depth=N print the total for a directory (or file, with –all)
only if it is N or fewer levels below the command
line argument; –max-depth=0 is the same as
–time show time of the last modification of any file in the
directory, or any of its subdirectories
–time=WORD show time as WORD instead of modification time:
atime, access, use, ctime or status
–time-style=STYLE show times using style STYLE:
full-iso, long-iso, iso, +FORMAT
FORMAT is interpreted like `date’
–help display this help and exit
–version output version information and exit

Display values are in units of the first available SIZE from –block-size,
and the DU_BLOCK_SIZE, BLOCK_SIZE and BLOCKSIZE environment variables.
Otherwise, units default to 1024 bytes (or 512 if POSIXLY_CORRECT is set).

SIZE may be (or may be an integer optionally followed by) one of following:
KB 1000, K 1024, MB 1000*1000, M 1024*1024, and so on for G, T, P, E, Z, Y.

Report du bugs to
GNU coreutils home page:
General help using GNU software:
For complete documentation, run: info coreutils ‘du invocation’

All done.

Leave a Reply

Your email address will not be published.


This site uses Akismet to reduce spam. Learn how your comment data is processed.