📖 Scenario: You are organizing files in a folder on your Linux system. You want to list files using patterns to find specific groups of files quickly.
🎯 Goal: Learn how to use file globbing with wildcards *, ?, and [] to match files in the command line.
📋 What You'll Learn
Use the ls command with wildcards to list files
Understand how * matches any characters
Understand how ? matches exactly one character
Understand how [] matches any one character inside brackets
💡 Why This Matters
🌍 Real World
File globbing is used daily by system administrators and developers to quickly find, list, or manipulate groups of files without typing each filename.
💼 Career
Knowing how to use wildcards in the command line is essential for tasks like batch renaming, backups, and scripting automation in Linux environments.
Progress0 / 4 steps
1
Create files for testing
Create exactly these files in the current directory using the touch command: file1.txt, file2.txt, fileA.txt, fileB.txt, data1.csv, data2.csv, image1.png, image2.png.
Linux CLI
Hint
Use one touch command with all filenames separated by spaces.
2
Set a pattern variable
Create a variable called pattern and set it to the string file?.txt to match files starting with 'file' followed by exactly one character and ending with '.txt'.
Linux CLI
Hint
Use single quotes around the pattern string.
3
List files matching the pattern
Use the ls command with the variable $pattern to list files matching the pattern file?.txt.
Linux CLI
Hint
Use ls $pattern to expand the variable and list matching files.
4
Output the matched files
Run the script and observe the output. It should list exactly these files: file1.txt, file2.txt, fileA.txt, fileB.txt.
Linux CLI
Hint
The output should show the four files matching the pattern.
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
Step 1: Understand the wildcard *
The * matches zero or more characters, so log* matches any file starting with 'log' followed by anything or nothing.
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*.
Final Answer:
log* -> Option D
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
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'.
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').
Final Answer:
data[1-9] -> Option C
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
Step 1: Understand the pattern file?.txt
The ? matches exactly one character, so it matches any file named 'file' plus one character plus '.txt'.
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.
Final Answer:
file1.txt, file2.txt, fileA.txt, fileB.txt -> Option B
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
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.
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.
Final Answer:
report* -> Option A
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
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'.
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 [].
Final Answer:
img0[1-9].png -> Option A
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 unknownstrongwhile earning +1 Grip toward your certificate.