Bird
Raised Fist0
Linux CLIscripting~10 mins

find with -exec for actions in Linux CLI - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - find with -exec for actions
Start: find command
↓
Search files matching criteria
↓
For each file found
↓
Execute action with -exec
↓
Repeat for next file
↓
End when no more files
The find command searches files, then runs the specified action on each file found using -exec, repeating until all files are processed.
Execution Sample
Linux CLI
find . -type f -name '*.txt' -exec echo Found: {} \;
This command finds all .txt files in the current directory and prints 'Found: filename' for each.
Execution Table
StepFile FoundAction ExecutedOutput
1./notes.txtecho Found: ./notes.txtFound: ./notes.txt
2./docs/readme.txtecho Found: ./docs/readme.txtFound: ./docs/readme.txt
3./logs/log1.txtecho Found: ./logs/log1.txtFound: ./logs/log1.txt
4No more filesNo actionEnd of execution
💡 No more files matching '*.txt' found, so find stops.
Variable Tracker
VariableStartAfter 1After 2After 3Final
Current FileNone./notes.txt./docs/readme.txt./logs/log1.txtNone
Key Moments - 3 Insights
Why do we use '{}' in the -exec action?
The '{}' is a placeholder replaced by the current file found, as shown in execution_table rows 1-3 where the file path appears in the output.
Why is there a '\;' at the end of the -exec command?
The '\;' tells find where the -exec command ends. Without it, find won't know when to stop reading the action, as seen in the execution_sample code.
Does the action run once or multiple times?
The action runs once for each file found, shown by multiple rows in execution_table where each file triggers the action.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what is the output when the second file is found?
AFound: ./docs/readme.txt
BFound: ./notes.txt
CNo action
DEnd of execution
💡 Hint
Check row 2 in the execution_table under Output column.
At which step does find stop executing actions?
AStep 3
BStep 4
CStep 1
DNever stops
💡 Hint
Look at the exit_note and the last row in execution_table.
If we change '*.txt' to '*.log', how would the execution_table change?
AOutput would be empty
BNo files would be found
CFiles with .log extension would appear instead of .txt
DThe command would fail
💡 Hint
The search pattern controls which files are found, as shown in the Current File variable_tracker.
Concept Snapshot
find [path] [criteria] -exec [command] {} \;
- Finds files matching criteria
- '{}' is replaced by each file found
- '\;' ends the -exec command
- Action runs once per file
- Useful for batch file operations
Full Transcript
The find command searches for files matching given criteria. When using -exec, it runs a specified action on each file found. The '{}' is a placeholder replaced by the current file path. The '\;' marks the end of the action command. The process repeats for every matching file until none remain, then find stops. For example, 'find . -type f -name '*.txt' -exec echo Found: {} \;' prints the name of each .txt file found. This helps automate tasks on many files easily.

Practice

(1/5)
1. What does the -exec option do in the find command?
easy
A. Changes the permissions of files found automatically.
B. Runs a specified command on each file found by find.
C. Lists only directories found by find.
D. Deletes all files found without confirmation.

Solution

  1. Step 1: Understand the purpose of -exec

    The -exec option in find runs a command on each file found by the search.
  2. Step 2: Differentiate from other options

    It does not delete, list only directories, or change permissions by itself; it just runs the given command.
  3. Final Answer:

    Runs a specified command on each file found by find. -> Option B
  4. Quick Check:

    -exec runs commands on found files [OK]
Hint: Remember: -exec means "execute command" on files [OK]
Common Mistakes:
  • Thinking -exec deletes files automatically
  • Confusing -exec with listing or filtering options
  • Forgetting to end -exec command with \;
2. Which of the following is the correct syntax to delete all .log files using find with -exec?
easy
A. find . -name '*.log' -exec rm {}
B. find . -name '*.log' -exec rm {} ;
C. find . -name '*.log' -exec rm {} \;
D. find . -name '*.log' -exec rm \;

Solution

  1. Step 1: Identify correct -exec ending

    The -exec command must end with \; to mark the end of the command.
  2. Step 2: Check command correctness

    find . -name '*.log' -exec rm {} \; correctly uses rm {} and ends with \;. Other options miss the backslash or semicolon or both.
  3. Final Answer:

    find . -name '*.log' -exec rm {} \; -> Option C
  4. Quick Check:

    Correct -exec ends with \; [OK]
Hint: Always end -exec commands with \; [OK]
Common Mistakes:
  • Omitting the backslash before semicolon
  • Leaving out the semicolon entirely
  • Not using {} as placeholder for file name
3. What will be the output of this command?
find /tmp -type f -name '*.txt' -exec echo File: {} \;
medium
A. Deletes all .txt files in /tmp directory.
B. Shows an error because echo cannot be used with -exec.
C. Lists only the names of .txt files without path.
D. Prints 'File: ' followed by each .txt file path found in /tmp.

Solution

  1. Step 1: Understand the command

    The command finds all files ending with .txt in /tmp and runs echo File: {} on each.
  2. Step 2: Predict output

    For each file found, it prints "File: " followed by the full file path (because {} is replaced by the path).
  3. Final Answer:

    Prints 'File: ' followed by each .txt file path found in /tmp. -> Option D
  4. Quick Check:

    -exec echo File: {} prints file paths [OK]
Hint: Remember {} is replaced by each file path found [OK]
Common Mistakes:
  • Thinking it deletes files
  • Assuming only file names print without path
  • Believing echo can't be used with -exec
4. Identify the error in this command:
find /var/log -name '*.log' -exec gzip {} ;
medium
A. Missing backslash before semicolon in -exec ending.
B. Incorrect use of quotes around '*.log'.
C. Using gzip instead of gunzip.
D. No error; command is correct.

Solution

  1. Step 1: Check -exec syntax

    The -exec command must end with \;, not just ;.
  2. Step 2: Validate other parts

    Quotes around '*.log' are correct, and gzip is appropriate to compress logs.
  3. Final Answer:

    Missing backslash before semicolon in -exec ending. -> Option A
  4. Quick Check:

    -exec must end with \; [OK]
Hint: Check for \ before ; to end -exec [OK]
Common Mistakes:
  • Using ; without backslash
  • Confusing compression commands
  • Removing quotes around patterns
5. You want to find all files larger than 5MB in /home/user and change their permissions to 644. Which command correctly uses find with -exec to do this?
hard
A. find /home/user -size +5M -exec chmod 644 {} \;
B. find /home/user -size +5M -exec chmod 644 {} ;
C. find /home/user -size +5M -exec chmod 644 \;
D. find /home/user -size +5M -exec chmod 644 {}

Solution

  1. Step 1: Understand size filter and command

    -size +5M finds files larger than 5MB. chmod 644 {} changes permissions of each found file.
  2. Step 2: Confirm correct -exec syntax

    The command must end with \; to mark the end of the -exec action. find /home/user -size +5M -exec chmod 644 {} \; correctly includes this.
  3. Final Answer:

    find /home/user -size +5M -exec chmod 644 {} \; -> Option A
  4. Quick Check:

    Use -exec with {} and end with \; [OK]
Hint: Use {} for file and end -exec with \; [OK]
Common Mistakes:
  • Omitting {} placeholder
  • Missing backslash before semicolon
  • Leaving out semicolon entirely
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