Bird
Raised Fist0
Linux CLIscripting~10 mins

find by name, type, and size in Linux CLI - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - find by name, type, and size
Start: User runs find command
↓
Parse options: name, type, size
↓
Search directory tree
↓
Check each file/directory
↓
Match name?
↓
All conditions met?
Yes↓
Print file path
↓
Continue until all files checked
↓
End
The find command checks each file in the directory tree against name, type, and size filters, printing paths that match all conditions.
Execution Sample
Linux CLI
find . -name "*.txt" -type f -size +1k
Find all regular files ending with .txt larger than 1 kilobyte in the current directory and subdirectories.
Execution Table
StepFile CheckedName MatchesType MatchesSize MatchesPrint Path?
1./notes.txtYes (*.txt)Yes (file)No (500 bytes)No
2./report.txtYes (*.txt)Yes (file)Yes (2k)Yes
3./image.pngNo (*.txt)Yes (file)Yes (5k)No
4./docsNo (*.txt)No (directory)N/ANo
5./docs/manual.txtYes (*.txt)Yes (file)Yes (3k)Yes
6./script.shNo (*.txt)Yes (file)Yes (1.5k)No
7./archive.zipNo (*.txt)Yes (file)Yes (10k)No
ExitAll files checked---Stop searching
💡 All files in the directory tree have been checked against the conditions.
Variable Tracker
VariableStartAfter 1After 2After 3After 4After 5After 6After 7Final
Current FileNone./notes.txt./report.txt./image.png./docs./docs/manual.txt./script.sh./archive.zipAll checked
Name MatchN/AYesYesNoNoYesNoNoN/A
Type MatchN/AYesYesYesNoYesYesYesN/A
Size MatchN/ANoYesYesN/AYesYesYesN/A
Print PathN/ANoYesNoNoYesNoNoN/A
Key Moments - 3 Insights
Why does the file './notes.txt' not get printed even though its name and type match?
Because its size is 500 bytes, which does not meet the condition '-size +1k' (greater than 1 kilobyte), as shown in execution_table row 1.
Why is the directory './docs' not printed even if it contains matching files?
Because the '-type f' option filters only regular files, so directories like './docs' are skipped, as seen in execution_table row 4.
What happens if a file matches name and size but not type?
It will not be printed because all conditions must be met; type mismatch causes rejection, as shown in execution_table row 3.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, which file is the first to be printed?
A./notes.txt
B./image.png
C./report.txt
D./docs/manual.txt
💡 Hint
Check the 'Print Path?' column for the first 'Yes' value.
At which step does the condition '-size +1k' first become true?
AStep 1
BStep 2
CStep 4
DStep 6
💡 Hint
Look at the 'Size Matches' column in the execution_table.
If the '-type f' option was removed, which file would then be printed at step 4?
A./docs
B./image.png
C./script.sh
D./archive.zip
💡 Hint
Step 4 is './docs' which is a directory; without '-type f', directories can match.
Concept Snapshot
find [path] -name "pattern" -type [f/d] -size [+/-]size
- Searches files/directories recursively
- Filters by name (wildcards), type (file or directory), and size
- Prints paths matching all conditions
- Size +1k means larger than 1 kilobyte
- Use '.' for current directory
Full Transcript
The 'find' command searches through directories and files starting from a given path. It checks each item against conditions like name pattern, type (file or directory), and size. Only items matching all conditions are printed. For example, 'find . -name "*.txt" -type f -size +1k' finds all regular files ending with .txt larger than 1 kilobyte in the current directory and its subdirectories. The execution table shows step-by-step how each file is checked and whether it matches each condition. Variables track the current file and match results. Key moments clarify why some files are not printed despite partial matches. The visual quiz tests understanding of the matching process and conditions. This helps beginners see how 'find' works in practice.

Practice

(1/5)
1. What does the find command option -name do in Linux CLI?
easy
A. Searches files or directories by their name pattern
B. Filters files by their size
C. Lists all files in the current directory
D. Changes the name of a file

Solution

  1. Step 1: Understand the -name option

    The -name option in the find command is used to search for files or directories that match a specific name pattern.
  2. Step 2: Compare with other options

    Options like filtering by size or listing files are done with other flags, not -name.
  3. Final Answer:

    Searches files or directories by their name pattern -> Option A
  4. Quick Check:

    -name = Search by name [OK]
Hint: Remember: -name matches file names exactly [OK]
Common Mistakes:
  • Confusing -name with size filters
  • Thinking -name lists files
  • Using -name to rename files
2. Which of the following is the correct syntax to find all regular files named report.txt in the current directory and its subdirectories?
easy
A. find . -type f -name report.txt
B. find . -name "report.txt" -type d
C. find . -type f -name "report.txt"
D. find / -type f -name report.txt

Solution

  1. Step 1: Understand the syntax for find

    The correct syntax requires the path (here . for current directory), the type -type f for regular files, and the name pattern with quotes -name "report.txt" to match the exact file name.
  2. Step 2: Check each option

    find . -type f -name report.txt misses quotes around the name, which can cause issues with special characters. find . -name "report.txt" -type d searches for directories (-type d) not files. find / -type f -name report.txt searches from root /, not current directory. find . -type f -name "report.txt" is correct with quotes and correct type.
  3. Final Answer:

    find . -type f -name "report.txt" -> Option C
  4. Quick Check:

    Quotes + correct type + current dir = find . -type f -name "report.txt" [OK]
Hint: Always quote the name pattern to avoid shell issues [OK]
Common Mistakes:
  • Omitting quotes around the name
  • Using wrong type flag (-type d instead of -type f)
  • Searching from wrong directory
3. What will be the output of the command find /tmp -type f -size +1M -name "*.log" assuming there are two files: /tmp/app.log (500K) and /tmp/error.log (2M)?
medium
A. /tmp/app.log /tmp/error.log
B. /tmp/error.log
C. /tmp/app.log
D. " (no output)

Solution

  1. Step 1: Understand the command filters

    The command searches in /tmp for regular files (-type f) with size greater than 1 megabyte (-size +1M) and names ending with .log (-name "*.log").
  2. Step 2: Apply filters to given files

    /tmp/app.log is 500K, which is less than 1M, so excluded. /tmp/error.log is 2M, which matches size and name filters, so included.
  3. Final Answer:

    /tmp/error.log -> Option B
  4. Quick Check:

    Size +1M and name *.log = /tmp/error.log [OK]
Hint: Size +1M means files larger than 1 megabyte [OK]
Common Mistakes:
  • Including files smaller than 1M
  • Ignoring the name pattern
  • Confusing +1M with exactly 1M
4. You run the command find . -type f -name *.txt -size -10k but get an error or unexpected results. What is the likely problem?
medium
A. The command needs sudo to run
B. Wrong size flag; should be +10k instead of -10k
C. Using -type f instead of -type d
D. Missing quotes around *.txt causing shell expansion

Solution

  1. Step 1: Identify the issue with -name pattern

    The pattern *.txt without quotes is expanded by the shell before find runs, causing unexpected behavior or errors.
  2. Step 2: Correct usage with quotes

    Enclosing *.txt in quotes like "*.txt" prevents shell expansion and lets find correctly match file names.
  3. Final Answer:

    Missing quotes around *.txt causing shell expansion -> Option D
  4. Quick Check:

    Always quote patterns in -name [OK]
Hint: Quote wildcards in -name to avoid shell expansion [OK]
Common Mistakes:
  • Not quoting the name pattern
  • Confusing size flags + and -
  • Using wrong type flag
5. You want to find all directories named backup larger than 100MB inside /var. Which command correctly achieves this?
hard
A. find /var -type d -name "backup" -size +100M -exec du -sh {} \;
B. find /var -type d -name "backup" -size +100M
C. find /var -type d -name "backup" -exec du -sh {} \; | awk '$1 > 100M'
D. find /var -type d -name "backup" -size +100M -size +100M

Solution

  1. Step 1: Understand find limitations on directory size

    The -size option measures file size, but for directories it measures disk usage metadata, not total content size.
  2. Step 2: Use -exec du -sh to get actual directory size

    find /var -type d -name "backup" -size +100M -exec du -sh {} \; uses -exec du -sh {} to show human-readable size of each directory found, which helps verify size over 100MB.
  3. Step 3: Confirm correct filtering

    find /var -type d -name "backup" -size +100M incorrectly uses -size +100M on directories which is unreliable. find /var -type d -name "backup" -exec du -sh {} \; | awk '$1 > 100M' tries to filter with awk but size format is not numeric only. find /var -type d -name "backup" -size +100M -size +100M repeats -size +100M unnecessarily.
  4. Final Answer:

    find /var -type d -name "backup" -size +100M -exec du -sh {} \; -> Option A
  5. Quick Check:

    Use -exec du -sh to check directory sizes [OK]
Hint: Use du with -exec to measure directory size [OK]
Common Mistakes:
  • Relying on -size for directory content size
  • Not quoting the name pattern
  • Repeating size filters unnecessarily
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard