Language Selection

English French German Italian Portuguese Spanish

Tutorial: Using the 'find' Command

Filed under

GNU find is a powerful command-line utility that lets you search for files and folders in a hierarchical tree directory structure. It is the backend for all those utilities out there like the graphical searching in KDE or GNOME. However, find can be a little hard to handle at first by beginners. In this tutorial I will try to explain some of the capabilities of find, show some useful one-liners and provide more explanations regarding this command.

In this tutorial I will start from the basic ways of using find and head up into showing more complicated (but very useful) ways of getting the most out of it, in order to search and display exactly the results that you are looking for. The version of find that I currently have installed is 4.4.2, as it comes with Ubuntu 12.04 Precise Pangolin, and Bash 4.2.20 (older versions should work without problem too). Special thanks go to for some really great one-liners.

If you’re not familiar with the terminal, command-line or Linux in general I suggest you read my introductory tutorial here: Introduction to Linux Command-Line for Beginners.
The Basics

The simplest way of using find is by typying it in a terminal:


This will list all the files and folders (including hidden ones and their sub-files and sub-folders) in the current directory, following the whole hierarchical structure. This will usually generate a long list of files and doesn’t seem to give us much. It’s exactly the same as:

find .

Where . is the currently working directory. This will list all the files and folders in the currently working directory.

It’s probably best to use a new folder somewhere in the file system to see this in effect, a folder which doesn’t have many sub-folders and files.

Moving on, let’s search for all the files that include the name profile in their filename:

find . -name *profile*

* is a wildcard that replaces any number of characters or no character. The above command searches in the current folder for the name *profile*.

find /usr/share -name FreeSans*

This will search inside /usr/share for all the files that start with FreeSans (and end in whatever characters e.g. FreeSans.ttf). I recommend using double quotes around the pattern to search for e.g. find . -name “.bash*”.

Another example:

find /usr/share -name FreeSans* | grep Oblique

So now you know how to search for a certain filename in a specific location.

Sometimes you need to ignore uppercase and lowercase and just search for text by ignoring case-sensitive. We’ll to this just by replacing -name with -iname:

find /usr/share -iname FREESANS*


find . -mtime +3 -iname *somefile*

This will search for files that were created earlier than 3 days ago.
Get only the filename instead of whole path to the file

find will return the whole path to the files that match the search pattern, so in order to get only the filename you can use the fprintf argument command:

find /usr/bin -name "alsa*"

To get only the filename, use:

find /usr/bin -name "alsa*" -printf "%f\n"

By size

To search for files by size, use the -size argument, for example:

find /usr -size +500k -name "*png"

This will search inside /usr for files which are equal to or larger than 500 KB and are ending in png. Another example:

find /usr -size +1M -name "*png"

Which will search for files which are bigger than 1 MB in size. Instead of the plus sign, you could use minus in order to search for files that are smaller than a specified size:

find /usr -size -10c -name "*png"

The -10c specifier tells find to only display files which are smaller than 10 bytes. Don’t forget the + or – preceding the desired filesize.
Automatically list details about the found files

You could use a pipe and the xargs command for this:

find /usr/lib -size +2M -name "*.so" | xargs ls -lh

Notice that this will list the files in the current directory if find returns no file.
Searching for files than contain specific text

This is probably one of the most useful ways to search for some file which name you’ve forgot but you know some of the text it contains inside.

find . -name "*bash*" -exec grep -l "aliases" {} +

This will search in all the files that contain the patter bash for the word aliases. Those files that contain this pattern will be printed out.
Some useful one-liners

Find top 20 largest files:

find . -type f -print0 | xargs -0 du -h | sort -hr | head -20


Special thanks go to and the following articles:

More in Tux Machines

Linux Foundation LFCS: Ahmed Alkabary

I always knew about Linux as an alternative to Windows, but never really got to experience it until 2011. I decided to buy a new laptop, and the laptop that stood out for me had Linux pre-installed on it. I remember well the pre-installed distribution was openSUSE. I was hesitant to buy it as I had no experience with Linux whatsoever, but I thought to myself, Well, I can just install windows on it if I don't like it. Once I booted the system and saw how fast and neat everything was, I thought it is a message from the Linux gods. It's really weird because on my first day I felt that Linux was meant for me not just as an operating system to use, but I felt my life will be centered around Linux from that day. Read more

Linux Mint 19 Cinnamon will open apps a lot faster

The Linux Mint development team plans to launch the next version of the popular Linux distribution Linux Mint in the coming months. Linux Mint 19 will be offered in multiple flavors including MATE, Xfce and Cinnamon. If you have used Linux Mint Cinnamon in the past or plan to take it for a test drive in the future, you may benefit from application loading improvements in the upcoming version of Linux Mint. A new blog post on the official Linux Mint blog offers some insight. It all began with a perceived feeling; team members noticed that app loading "felt" faster on MATE or Xfce versions of Linux Mint and slower on Cinnamon versions. Read more

Hands-on with the Raspberry Pi 3 Model B+

The new Raspberry Pi 3 Model B+ was announced and started shipping last week. Of course, I went straight to the good folks at the Swiss and ordered one, which I received the next day. So, the first thing on my to-do list is to congratulate and thank both the Pi Foundation and the for their efficiency in making this new model available immediately after announcement. Read more Also: You Can Now Transform Your Raspberry Pi 3 Model B+ into a Home Theatre System


  • Linux Foundation announces open source ACRN hypervisor for the Internet of Things
    ACRN's small footprint is partly attributable to the fact that it takes a mere 25,000 lines of code for a hypervisor. There's already involvement from the likes of ADLINK, Aptiv, Intel Corporation, LG Electronics and Neusoft Corporation, and it's likely that many more names will join this list.
  • Linux Foundation Announces ACRN —Open Source Hypervisor for IoT Devices
    The Linux Foundation announced a new project called ACRN (pronounced "acorn") that will provide generic code for the creation of hypervisors for IoT devices. A hypervisor is computer code for creating and running virtual machines. Project ACRN aims to provide a generic structure for an IoT-specific hypervisor component. The Linux Foundation says it built ACRN to be fully-customizable, and as such, the project is comprised of two main components: the hypervisor itself and a device model for interacting with the underlying hardware.
  • Linux Foundation backs new ‘ACRN’ hypervisor for embedded and IoT
    The Linux Foundation has announced a new hypervizor for use in embedded and internet of things scenarios. Project ACRN (pronounced “acorn”) will offer a “hypervizor, and its device model complete with rich I/O mediators.” There’ll also be “a Linux-based Service OS” and the ability to “run guest operating systems (another Linux instance, an RTOS, Android, or other operating systems) simultaneously”.