Bird
Raised Fist0
Linux CLIscripting~5 mins

File globbing (wildcards *, ?, []) in Linux CLI - Commands & Configuration

Choose your learning style10 modes available
Introduction
File globbing helps you find or work with groups of files using simple patterns instead of typing every file name. It saves time when you want to list, copy, or delete many files that share similar names.
When you want to list all files with a certain extension, like all .txt files in a folder.
When you need to copy all images starting with 'photo' to another folder.
When you want to delete all backup files ending with ~ in a directory.
When you want to check the contents of files that start with a specific letter.
When you want to move files with names matching a pattern but don’t want to type each name.
Commands
Lists all files in the current directory that end with .txt using the * wildcard to match any characters before .txt.
Terminal
ls *.txt
Expected OutputExpected
notes.txt report.txt todo.txt
Lists files with names starting with 'photo' followed by exactly one character, then .jpg. The ? matches any single character.
Terminal
ls photo?.jpg
Expected OutputExpected
photo1.jpg photoA.jpg
Lists files named file1.log, file2.log, or file3.log. The [123] matches any one character inside the brackets.
Terminal
ls file[123].log
Expected OutputExpected
file1.log file2.log file3.log
Deletes all files starting with 'backup~' followed by any characters. Useful for removing backup files with names like backup~1, backup~old.
Terminal
rm backup~*
Expected OutputExpected
No output (command runs silently)
Copies files with names like report1.doc or reportA.doc to the documents folder. The ? matches exactly one character.
Terminal
cp report?.doc /home/user/documents/
Expected OutputExpected
No output (command runs silently)
Key Concept

If you remember nothing else from this pattern, remember: * matches any number of characters, ? matches exactly one character, and [ ] matches any one character inside the brackets.

Common Mistakes
Using * when you mean to match exactly one character.
* matches zero or more characters, so it can match more files than intended.
Use ? to match exactly one character when you want precise control.
Forgetting to quote patterns when files have spaces.
Shell splits unquoted patterns on spaces, causing errors or unexpected matches.
Put quotes around patterns like "*.txt" if filenames may contain spaces.
Using [ ] with ranges incorrectly, like [1-3a].
Ranges must be continuous; mixing numbers and letters without proper syntax causes no matches.
Use separate ranges or list characters explicitly, e.g., [1-3a] is valid but be sure what you want to match.
Summary
Use * to match any number of characters in file names.
Use ? to match exactly one character in file names.
Use [ ] to match any one character from a set or range.
Combine these wildcards to select groups of files quickly.
Always check your matches with ls before running commands that change files.

Practice

(1/5)
1. Which wildcard pattern matches all files with any extension starting with log in their name?
easy
A. log* only matches files named exactly 'log'
B. log?
C. log[0-9]
D. log*

Solution

  1. Step 1: Understand the wildcard *

    The * matches zero or more characters, so log* matches any file starting with 'log' followed by anything or nothing.
  2. Step 2: Compare other options

    log? matches 'log' plus exactly one character, log[0-9] matches 'log' plus one digit, and the last option is incorrect about log*.
  3. Final Answer:

    log* -> Option D
  4. Quick Check:

    Wildcard * matches any characters [OK]
Hint: Use * to match any number of characters [OK]
Common Mistakes:
  • Confusing * with ? wildcard
  • Thinking * matches only one character
  • Misunderstanding [] as matching multiple characters
2. Which of the following is the correct pattern to match files named data1, data2, but not data10?
easy
A. data?
B. data*
C. data[1-9]
D. data??

Solution

  1. Step 1: Understand the pattern data[1-9]

    This matches 'data' followed by exactly one digit from 1 to 9, so it matches 'data1' and 'data2' but not 'data10'.
  2. Step 2: Check other patterns

    data? matches 'data' plus any one character (including letters), data* matches 'data' plus any characters (including 'data10'), and data?? matches 'data' plus exactly two characters (so it matches 'data10').
  3. Final Answer:

    data[1-9] -> Option C
  4. Quick Check:

    Square brackets match one character from set [OK]
Hint: Use [ ] to match one character from a range [OK]
Common Mistakes:
  • Using * which matches too many files
  • Using ? which matches any single character, not range
  • Confusing number of characters matched
3. Given files: file1.txt, file2.txt, fileA.txt, fileB.txt, what files does the pattern file?.txt match?
medium
A. file1.txt, file2.txt
B. file1.txt, file2.txt, fileA.txt, fileB.txt
C. fileA.txt, fileB.txt
D. file.txt

Solution

  1. Step 1: Understand the pattern file?.txt

    The ? matches exactly one character, so it matches any file named 'file' plus one character plus '.txt'.
  2. Step 2: Check which files match

    All files with names 'file1.txt', 'file2.txt', 'fileA.txt', and 'fileB.txt' have exactly one character after 'file' before '.txt', so all match.
  3. Final Answer:

    file1.txt, file2.txt, fileA.txt, fileB.txt -> Option B
  4. Quick Check:

    ? matches exactly one character [OK]
Hint: Use ? to match exactly one character [OK]
Common Mistakes:
  • Thinking ? matches zero or multiple characters
  • Confusing ? with *
  • Ignoring file extension in pattern
4. You want to list files named report1, report2, and report3 only. Which pattern is incorrect?
medium
A. report*
B. report?
C. report[1-3]
D. report[123]

Solution

  1. Step 1: Analyze pattern report*

    This matches 'report' plus any characters, so it matches more than just 'report1', 'report2', and 'report3'. It includes 'report10', 'report_final', etc.
  2. Step 2: Check other patterns

    report[1-3] and report[123] match exactly one character from 1,2,3 after 'report'. report? matches 'report' plus any one character, which includes 'report1', 'report2', 'report3' but also others with one character.
  3. Final Answer:

    report* -> Option A
  4. Quick Check:

    * matches too many files [OK]
Hint: Use [] to limit characters, * matches too many [OK]
Common Mistakes:
  • Using * when exact matches needed
  • Assuming ? limits to digits only
  • Not realizing [] matches one character only
5. You have files: img01.png, img02.png, img10.png, img20.png. Which pattern matches only files with numbers from 01 to 09?
hard
A. img0[1-9].png
B. img[0-9][1-9].png
C. img??.png
D. img[01-09].png

Solution

  1. Step 1: Understand pattern img0[1-9].png

    This matches 'img0' plus one digit from 1 to 9, then '.png'. So it matches 'img01.png' to 'img09.png'.
  2. Step 2: Check other patterns

    img[0-9][1-9].png matches any two digits, including 'img10.png' and 'img20.png'. img??.png matches any two characters after 'img', so all files. img[01-09].png is invalid syntax because ranges like '01-09' are not valid inside [].
  3. Final Answer:

    img0[1-9].png -> Option A
  4. Quick Check:

    Use 0 then [1-9] for numbers 01-09 [OK]
Hint: Use fixed digit then range in [] for number ranges [OK]
Common Mistakes:
  • Using invalid range syntax inside []
  • Using ?? which matches any two characters
  • Not fixing leading zero for 01-09
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