📖 Scenario: You are managing a Raspberry Pi that collects sensor data every day. To save space, you want to keep only the latest 5 days of data files and remove older ones automatically.
🎯 Goal: Build a Python script that lists data files, keeps only the latest 5 files, and deletes older files to clean up storage.
📋 What You'll Learn
Create a list of data file names with dates in the format 'data_YYYYMMDD.txt'.
Set a variable to keep track of how many recent files to keep.
Use a sorting method to find the latest files and select only those to keep.
Print the list of files that will be deleted.
💡 Why This Matters
🌍 Real World
This script helps Raspberry Pi users manage limited storage by automatically cleaning old sensor data files.
💼 Career
Understanding file management and cleanup scripts is useful for system administrators and IoT developers who maintain devices with limited storage.
Progress0 / 4 steps
1
Create the list of data files
Create a list called data_files with these exact file names: 'data_20230420.txt', 'data_20230421.txt', 'data_20230422.txt', 'data_20230423.txt', 'data_20230424.txt', 'data_20230425.txt', 'data_20230426.txt'.
Raspberry Pi
Hint
Use square brackets to create a list and put each file name as a string inside.
2
Set the number of files to keep
Create a variable called keep_count and set it to 5 to keep the latest 5 files.
Raspberry Pi
Hint
Just assign the number 5 to the variable keep_count.
3
Select files to delete
Sort the data_files list in ascending order and create a new list called files_to_delete that contains all files except the last keep_count files.
Raspberry Pi
Hint
Use the sorted() function to sort the list. Use slicing to get all but the last keep_count files.
4
Print files to delete
Print the files_to_delete list to show which files will be deleted.
Raspberry Pi
Hint
Use print(files_to_delete) to show the list.
Practice
(1/5)
1. What is the main purpose of data rotation and cleanup on a Raspberry Pi?
easy
A. To keep storage organized and remove old files
B. To increase the CPU speed
C. To install new software automatically
D. To change the screen resolution
Solution
Step 1: Understand data rotation and cleanup
Data rotation and cleanup help manage files by removing old or unnecessary data.
Step 2: Identify the main goal
The goal is to keep storage organized and free space by deleting old files.
Final Answer:
To keep storage organized and remove old files -> Option A
Quick Check:
Data rotation = storage cleanup [OK]
Hint: Think about storage space and file management [OK]
Common Mistakes:
Confusing data cleanup with hardware upgrades
Thinking it changes system performance directly
Assuming it installs software automatically
2. Which of the following commands correctly deletes files older than 7 days in the /var/log directory on Raspberry Pi?
easy
A. find /var/log -type d -mtime +7 -delete
B. find /var/log -type f -mtime +7 -delete
C. rm /var/log/* -mtime +7
D. delete /var/log -older 7
Solution
Step 1: Understand the find command syntax
To delete files older than 7 days, use find with -type f (files), -mtime +7 (older than 7 days), and -delete.
Step 2: Check each option
find /var/log -type f -mtime +7 -delete uses correct syntax. find /var/log -type d -mtime +7 -delete targets directories (-type d), not files. rm /var/log/* -mtime +7 uses rm incorrectly with -mtime. delete /var/log -older 7 is not a valid command.
Final Answer:
find /var/log -type f -mtime +7 -delete -> Option B
Quick Check:
find + -mtime +7 + -delete = correct [OK]
Hint: Use find with -type f and -mtime +days to delete old files [OK]
Common Mistakes:
Using -type d instead of -type f
Trying to use rm with -mtime option
Using invalid commands like delete
3. What will be the output of this script snippet on Raspberry Pi?
logfile="/var/log/syslog"
backup="/var/log/syslog-$(date +%Y%m%d)"
mv $logfile $backup
> $logfile
ls /var/log/syslog*
medium
A. Only /var/log/syslog-YYYYMMDD file listed
B. Only /var/log/syslog file listed
C. /var/log/syslog and /var/log/syslog-YYYYMMDD files listed
D. No files listed, error occurs
Solution
Step 1: Understand the script actions
The script renames syslog to syslog-YYYYMMDD (today's date), then creates a new empty syslog file.
Step 2: Predict the ls output
After these steps, both /var/log/syslog (empty) and /var/log/syslog-YYYYMMDD exist, so ls lists both.
Final Answer:
/var/log/syslog and /var/log/syslog-YYYYMMDD files listed -> Option C
Quick Check:
mv + new empty file + ls = both files [OK]
Hint: Renaming then recreating file shows both in listing [OK]
Common Mistakes:
Thinking syslog file is deleted
Assuming mv copies instead of moves
Ignoring the empty file creation with >
4. Identify the error in this Raspberry Pi log rotation script snippet:
A. The find command should use -mtime +7 to delete files older than 7 days
B. The mv command syntax is incorrect
C. The > $logfile line should be before mv command
D. The backup filename format is invalid
Solution
Step 1: Check the find command usage
The find command uses -mtime 7 which matches files exactly 7 days old, not older than 7 days.
Step 2: Correct the find command
To delete files older than 7 days, use -mtime +7 instead of -mtime 7.
Final Answer:
The find command should use -mtime +7 to delete files older than 7 days -> Option A
Quick Check:
find -mtime +7 deletes older files [OK]
Hint: Use + before days in -mtime to delete older files [OK]
Common Mistakes:
Using -mtime 7 deletes only files exactly 7 days old
Misplacing the > $logfile line
Incorrect mv command syntax
5. You want to automate log rotation on your Raspberry Pi so that every day the current log file /var/log/myapp.log is renamed with the date, a new empty log is created, and logs older than 14 days are deleted. Which script snippet correctly performs this task?
hard
A. mv /var/log/myapp.log /var/log/myapp.log-$(date +%Y%m%d)
> /var/log/myapp.log
find /var/log -type f -name 'myapp.log-*' -mtime 14 -delete
B. mv /var/log/myapp.log /var/log/myapp.log-$(date +%Y%m%d)
rm /var/log/myapp.log
find /var/log -type f -mtime +14 -delete
C. backup="/var/log/myapp.log-$(date +%Y%m%d)"
cp /var/log/myapp.log $backup
> /var/log/myapp.log
find /var/log -type f -name 'myapp.log-*' -mtime 14 -delete
D. backup="/var/log/myapp.log-$(date +%Y%m%d)"
mv /var/log/myapp.log $backup
> /var/log/myapp.log
find /var/log -type f -name 'myapp.log-*' -mtime +14 -delete
Solution
Step 1: Rename current log and create new empty log
backup="/var/log/myapp.log-$(date +%Y%m%d)"
mv /var/log/myapp.log $backup
> /var/log/myapp.log
find /var/log -type f -name 'myapp.log-*' -mtime +14 -delete correctly moves the log file to a dated backup and creates a new empty log with >.
Step 2: Delete logs older than 14 days
backup="/var/log/myapp.log-$(date +%Y%m%d)"
mv /var/log/myapp.log $backup
> /var/log/myapp.log
find /var/log -type f -name 'myapp.log-*' -mtime +14 -delete uses find with -name 'myapp.log-*' and -mtime +14 to delete backups older than 14 days, which is correct.
Final Answer:
backup="/var/log/myapp.log-$(date +%Y%m%d)"
mv /var/log/myapp.log $backup
> /var/log/myapp.log
find /var/log -type f -name 'myapp.log-*' -mtime +14 -delete -> Option D