Practical File Management Exercise
In this final step, we will put together everything we've learned to solve a practical file management problem. This exercise will reinforce your understanding of wildcards and demonstrate their practical application.
Scenario
Imagine you are a system administrator responsible for organizing a directory containing various types of files. You need to:
- Identify and categorize files by type
- Make a backup of important files
- Extract files based on specific naming patterns
Let's simulate this scenario:
Creating a Simulated Project Directory
First, let's create a new project directory with various types of files:
cd ~/project/wildcards_lab
mkdir project_files
cd project_files
## Create various types of files
touch project_doc_v1.txt project_doc_v2.txt project_doc_final.txt
touch data_2023_01.csv data_2023_02.csv data_2023_03.csv
touch config_dev.yml config_test.yml config_prod.yml
touch backup_script_v1.sh backup_script_v2.sh
touch image001.png image002.png image003.png
touch .project_config .project_log
Let's check our directory:
ls
Output:
backup_script_v1.sh config_prod.yml data_2023_02.csv image002.png project_doc_v1.txt
backup_script_v2.sh config_test.yml data_2023_03.csv image003.png project_doc_v2.txt
config_dev.yml data_2023_01.csv image001.png project_doc_final.txt
Note: The hidden files (starting with .
) won't appear in the basic ls
output.
Organizing Files by Type
Now, let's create directories for different file types and organize our files:
## Create directories
mkdir docs configs scripts data images backups
## Copy text documents to docs directory
cp *doc*.txt docs/
## Copy configuration files to configs directory
cp *.yml configs/
## Copy scripts to scripts directory
cp *.sh scripts/
## Copy data files to data directory
cp *.csv data/
## Copy images to images directory
cp *.png images/
Let's verify our organization:
echo "Documents:"
ls docs/
echo "Configurations:"
ls configs/
echo "Scripts:"
ls scripts/
echo "Data files:"
ls data/
echo "Images:"
ls images/
Output:
Documents:
project_doc_final.txt project_doc_v1.txt project_doc_v2.txt
Configurations:
config_dev.yml config_prod.yml config_test.yml
Scripts:
backup_script_v1.sh backup_script_v2.sh
Data files:
data_2023_01.csv data_2023_02.csv data_2023_03.csv
Images:
image001.png image002.png image003.png
Creating a Comprehensive Backup
Let's create a comprehensive backup that includes all important files:
## Create a backup of all non-image files
cp !(*.png|*backup*) backups/
## Let's see what's in our backups directory
ls backups/
Output:
config_dev.yml config_test.yml data_2023_01.csv data_2023_03.csv project_doc_final.txt project_doc_v2.txt
config_prod.yml data_2023_02.csv project_doc_v1.txt
Finding Files with Specific Patterns
Now, let's find files that match specific patterns:
## Find all files from 2023
echo "Files from 2023:"
ls *2023*
## Find all final or production versions
echo "Final/Production versions:"
ls *final* *prod*
## Find all version 2 files
echo "Version 2 files:"
ls *v2*
Output:
Files from 2023:
data_2023_01.csv data_2023_02.csv data_2023_03.csv
Final/Production versions:
config_prod.yml project_doc_final.txt
Version 2 files:
backup_script_v2.sh project_doc_v2.txt
Practical Application: Creating a Deployment Package
Finally, let's create a deployment package containing only production configurations and final documentation:
mkdir deployment_package
cp *prod*.yml *final*.txt deployment_package/
## Check our deployment package
ls deployment_package/
Output:
config_prod.yml project_doc_final.txt
Congratulations! You've successfully completed a practical file management exercise using Linux wildcards. These skills will be invaluable for efficiently managing files in a Linux environment, automating repetitive tasks, and organizing your file system effectively.