Q. How do I find out all large files in a directory?
A. There is no single command that can be used to list all large files. But, with the help of find command and shell pipes, you can easily list all large files.
Linux List All Large Files
To finds all files over 50,000KB (50MB+) in size and display their names, along with size, use following syntax:
Syntax for RedHat / CentOS / Fedora Linux
find {/path/to/directory/} -type f -size +{size-in-kb}k -exec ls -lh {} \; | awk '{ print $9 ": " $5 }'
Search or find big files Linux (50MB) in current directory, enter:
$ find . -type f -size +50000k -exec ls -lh {} \; | awk '{ print $9 ": " $5 }'
Search in my /var/log directory:
# find /var/log -type f -size +100000k -exec ls -lh {} \; | awk '{ print $9 ": " $5 }'
Syntax for Debian / Ubuntu Linux
find {/path/to/directory} -type f -size +{file-size-in-kb}k -exec ls -lh {} \; | awk '{ print $8 ": " $5 }'
Search in current directory:
$ find . -type f -size +10000k -exec ls -lh {} \; | awk '{ print $8 ": " $5 }'
Sample output:
./.kde/share/apps/akregator/Archive/http___blogs.msdn.com_MainFeed.aspx?Type=AllBlogs.mk4: 91M ./out/out.tar.gz: 828M ./.cache/tracker/file-meta.db: 101M ./ubuntu-8.04-desktop-i386.iso: 700M ./vivek/out/mp3/Eric: 230M
Above commands will lists files that are are greater than 10,000 kilobytes in size. To list all files in your home directory tree less than 500 bytes in size, type:
$ find $HOME -size -500b
OR
$ find ~ -size -500b
To list all files on the system whose size is exactly 20 512-byte blocks, type:
# find / -size 20
Perl hack: To display large files
Jonathan has contributed following perl code print out stars and the length of the stars show the usage of each folder / file from smallest to largest on the box:
du -k | sort -n | perl -ne 'if ( /^(\d+)\s+(.*$)/){$l=log($1+.1);$m=int($l/log(1024)); printf ("%6.1f\t%s\t%25s %s\n",($1/(2**(10*$m))),(("K","M","G","T","P")[$m]),"*"x (1.5*$l),$2);}'
ls command: finding the largest files in a directory
You can also use ls command:
$ ls -lS
$ ls -lS | less
$ ls -lS | head +10
ls command: finding the smallest files in a directory
Use ls command as follows:
$ ls -lSr
$ ls -lSr | less
$ ls -lSr | tail -10
You can also use du command as pointed out georges in the comments.
See more find command examples and usage here and here.
Featured Articles:
- 20 Linux System Monitoring Tools Every SysAdmin Should Know
- My 10 UNIX Command Line Mistakes
- 10 Greatest Open Source Software Of 2009
- Top 5 Email Client For Linux, Mac OS X, and Windows Users
- Top 20 OpenSSH Server Best Security Practices
- Top 10 Open Source Web-Based Project Management Software
- Top 5 Linux Video Editor Software
- Email FAQ to a friend
- Download PDF version
- Printable version
- Comment RSS feed
- Last Updated: 12/17/08



{ 15 comments… read them below or add one }
I use a script with this…
find . -xdev -printf ā%s %p\nā |sort -nr|head -20Excellent scott!
What I use is much simpler and efficient I’m afraid:
du -xak .|sort -n|tail -50it lists the 50 biggest files or directories sorted by size
Poor man’s command.
ls -lhR | grep 'G 'Not perfect but let me know the big files more than 1 GB
ls -lhS (shortest ;))
But different way to achieve same goal (ls for local dir, find for comprehensive search)
BTW syntax of find must be I thougth:
find /var/log -type f -size +100000k -exec ls -lh {} \; <- with “\;” at the end ?
Topper,
Dam html… thanks for the heads up.
I prefer this perl script feeding from a du -k :
du -k | sort -n | perl -ne 'if ( /^(\d+)\s+(.*$)/){$l=log($1+.1);$m=int($l/log(1024)); printf ("%6.1f\t%s\t%25s %s\n",($1/(2**(10*$m))),(("K","M","G","T","P")[$m]),"*"x (1.5*$l),$2);}'It’ll print out stars and the length of the stars show the usage of each folder / file from smallest to largest on the box. Enjoy!
du -k | sort -n | perl -ne 'if ( /^(\d+)\s+(.*$)/){$l=log($1+.1);$m=int($l/log(1024)); printf ("%6.1f\t%s\t%25s %s\n",($1/(2**(10*$m))),(("K","M","G","T","P")[$m]),"*"x (1.5*$l),$2);}'Jonathan,
Thanks for sharing your nifty perl code. The faq has been updated with your code.
If using RedHat 6.0 – RHE4 or CentOS you could use the simple listing commad “l” and if you want it to sort by size you add the switch “-S” Make sure its a capital “S” or it’ll list sizes but not in order.
l -S
this will return everything in that directory from largest to smallest.
if you want to do listing in a directory and need to figure out the switch you could also do “l –help” this will bring up the help file for the listing command.
how bout using this :
find /var -size +10000k -print0 | xargs -0 ls -lSh
this will list all files in /var directory,sort it in descending order and in more human readable format :)
@ronald
Your find doesn’t work across subdirectories. It’s definitely very clean for a leaf directory though.
wut do you mean by it doesnt work across subdirectories ? i tried it on my ubuntu box and it show files in the subdirectories.
-rw-rw—- 1 mysql mysql 412M Jan 15 10:18 /var/lib/mysql/darta/namefile.MYD
-rw-rw—- 1 mysql mysql 173M Jun 9 2009 /var/lib/mysql/flyingfight/dbacomment.MYD
-rw-rw—- 1 mysql mysql 165M Jan 15 10:40 /var/lib/mysql/interndba/post.MYI
-rw-rw—- 1 mysql mysql 159M Jan 15 10:40 /var/lib/mysql/interndba/post.MYD
-rw——- 1 root root 105M Jan 10 03:31 /var/log/messages.1
those files are in different subdirectories right?
@ronald
Interesting. I dug a bit. My use case is find the largest files in a directory and not just those over 10M. So I had removed the size restriction, but the same problem occurs with a smaller size restriction. Even with “-size +100k” find was returning directories as well as files. This messed up the expected results as I previously saw.
So for me, this one works as expected.
find . -type f -print0 | xargs -0 ls -lSh | head -20
Thanks.
owh yes, i forgot to say that it will list all the files bigger than 10MB,since wut i ned is to list biggest files, and yeah ur addition to the command does the thing :)
or u can add “more” to the command
the power of command line, the beauty of linux :)