Introduction
In this lab, you will learn how to effectively search for files in a Linux system using the powerful find command. The find command is a versatile tool that allows you to search for files and directories based on various criteria such as name, size, modification time, and more.
By the end of this lab, you will be able to:
- Use the basic syntax of the
findcommand - Search for files by specific names
- Find files based on their size
- Combine multiple search criteria
These skills are essential for system administrators, developers, and anyone working with Linux systems who needs to efficiently locate files within the filesystem.
Exploring find Basics
The find command is a powerful tool in Linux that helps you search for files and directories within a specified location. The basic syntax of the find command is:
find [starting-point] [options] [expression]
Where:
[starting-point]is the directory wherefindshould start searching[options]control how the search is performed[expression]defines the criteria for selecting files
Let's create a directory structure to practice with. Open your terminal and execute the following commands:
mkdir -p ~/project/files/{documents,images,music}
touch ~/project/files/documents/{report.txt,notes.txt,project.pdf}
touch ~/project/files/images/{photo1.jpg,photo2.jpg,diagram.png}
touch ~/project/files/music/{song1.mp3,song2.mp3}
These commands create a directory structure with several subdirectories and files of different types.
Now, let's use the find command to list all files in the files directory:
find ~/project/files -type f
You should see output similar to:
/home/labex/project/files/documents/report.txt
/home/labex/project/files/documents/notes.txt
/home/labex/project/files/documents/project.pdf
/home/labex/project/files/images/photo1.jpg
/home/labex/project/files/images/photo2.jpg
/home/labex/project/files/images/diagram.png
/home/labex/project/files/music/song1.mp3
/home/labex/project/files/music/song2.mp3
In this command:
~/project/filesspecifies where to start the search-type ftellsfindto look only for files (not directories)
You can also use find to list only directories:
find ~/project/files -type d
This will display:
/home/labex/project/files
/home/labex/project/files/documents
/home/labex/project/files/images
/home/labex/project/files/music
The -type d option tells find to look only for directories.
Finding Files by Name
One of the most common uses of the find command is to search for files by their name. The -name option allows you to specify a pattern to match against filenames.
Let's say you want to find all text files in the files directory. You can use:
find ~/project/files -type f -name "*.txt"
This command should return:
/home/labex/project/files/documents/report.txt
/home/labex/project/files/documents/notes.txt
In this command:
-name "*.txt"tellsfindto match filenames that end with.txt- The
*is a wildcard that matches any number of characters
The -name option is case-sensitive. If you want to search for files regardless of case, use -iname instead:
find ~/project/files -type f -iname "*.TXT"
This will still find report.txt and notes.txt even though we specified the extension in uppercase.
Now, let's try to find a specific file. Let's create a new file with a unique name:
touch ~/project/files/documents/important_report.txt
To find this specific file:
find ~/project/files -type f -name "important_report.txt"
Output:
/home/labex/project/files/documents/important_report.txt
You can also search in specific subdirectories. For example, to search only in the images directory:
find ~/project/files/images -type f -name "*.jpg"
Output:
/home/labex/project/files/images/photo1.jpg
/home/labex/project/files/images/photo2.jpg
This command searches only within the images directory for files with the .jpg extension.
Finding Files by Size
The find command can also search for files based on their size using the -size option. This is useful when you need to find large files that might be taking up disk space or small files that might be empty.
First, let's understand the syntax for the -size option:
-size n[cwbkMG]
Where:
nis a number- The letters represent units: c (bytes), w (2-byte words), b (512-byte blocks), k (kilobytes), M (megabytes), G (gigabytes)
- Prefixing
nwith+means "greater than n", and-means "less than n"
Let's add some content to our files to give them different sizes:
echo "This is a short text file." > ~/project/files/documents/notes.txt
for i in {1..100}; do
echo "This is line $i of the important report." >> ~/project/files/documents/important_report.txt
done
Now, let's find files smaller than 100 bytes:
find ~/project/files -type f -size -100c
This might include some of our empty or nearly empty files.
To find files larger than 1 kilobyte:
find ~/project/files -type f -size +1k
This should include our important_report.txt file because we added 100 lines to it.
You can also specify an exact size. Let's create a file with exactly 50 bytes:
echo -n "This is exactly 50 bytes long........................." > ~/project/files/documents/exact_size.txt
Now, find files that are exactly 50 bytes:
find ~/project/files -type f -size 50c
Output:
/home/labex/project/files/documents/exact_size.txt
To verify the size of the file, you can use the ls -l command:
ls -l ~/project/files/documents/exact_size.txt
The second column in the output shows the file size in bytes, which should be 50.
Combining Multiple Search Criteria
The find command becomes even more powerful when you combine multiple search criteria. You can use logical operators to create complex search patterns.
Using AND Logic
By default, when you specify multiple criteria, find uses AND logic, meaning all conditions must be true. For example, to find all text files larger than 100 bytes:
find ~/project/files -type f -name "*.txt" -size +100c
This command finds files that are both text files AND larger than 100 bytes.
Using OR Logic with -o
To use OR logic, you can use the -o option. For example, to find files that are either text files OR PDF files:
find ~/project/files -type f \( -name "*.txt" -o -name "*.pdf" \)
Note the use of parentheses, which must be escaped with backslashes. This command finds files that match either condition.
The output should include:
/home/labex/project/files/documents/report.txt
/home/labex/project/files/documents/notes.txt
/home/labex/project/files/documents/important_report.txt
/home/labex/project/files/documents/exact_size.txt
/home/labex/project/files/documents/project.pdf
Using NOT Logic with
To negate a condition, use the ! operator. For example, to find all files that are not text files:
find ~/project/files -type f ! -name "*.txt"
This command finds all files that do NOT have a .txt extension.
Complex Examples
Let's try some more complex combinations. For example, to find all files that are:
- Either JPG or PNG images AND
- Larger than 0 bytes
find ~/project/files -type f \( -name "*.jpg" -o -name "*.png" \) -size +0c
To find all files in the documents directory that are not PDF files:
find ~/project/files/documents -type f ! -name "*.pdf"
Let's create some additional files to demonstrate a more complex search:
## Create some large and small image files
echo "This is a large JPG file" > ~/project/files/images/large_image.jpg
for i in {1..50}; do
echo "Adding content to make this file larger." >> ~/project/files/images/large_image.jpg
done
touch ~/project/files/images/empty_image.png
Now, let's find all image files (JPG or PNG) that are either empty OR larger than 1KB:
find ~/project/files/images -type f \( -name "*.jpg" -o -name "*.png" \) \( -size 0 -o -size +1k \)
This complex command demonstrates how you can create sophisticated search criteria by combining multiple conditions with logical operators.
Summary
In this lab, you've learned how to use the Linux find command to efficiently search for files based on various criteria. Here's a recap of what you've accomplished:
- You learned the basic syntax of the
findcommand and how to search for files and directories. - You discovered how to find files by name using the
-nameoption and wildcards. - You explored how to search for files based on their size using the
-sizeoption with different units. - You combined multiple search criteria using logical operators (AND, OR, NOT) to perform complex searches.
The find command is one of the most powerful and flexible tools available in Linux for locating files. As you continue working with Linux systems, you'll find these skills invaluable for managing files, troubleshooting issues, and automating tasks.
Key points to remember:
- Use
-type ffor files and-type dfor directories - Use
-namefor case-sensitive filename searches and-inamefor case-insensitive searches - Use
-sizewith appropriate units (c, k, M, G) to find files by size - Combine criteria with logical operators to create complex search patterns
These skills will help you navigate and manage files efficiently in any Linux environment.



