How to Automate File Cleanup in Linux Servers

How to Automate File Cleanup in Linux Servers


Linux provides robust tools for managing and automating various tasks, including file cleanup. Whether you are dealing with log files, temporary files, or backups, keeping unnecessary files in check can be vital for system performance and storage management. This article will provide an in-depth guide to automating file cleanup in Linux, using a specific use case of cleaning up backup files on a Debian server with Virtualmin.

If you are not familiar with Linux Operating Systems you can take our Complete Cloud Engineering Course in Linux or our free Linux Mastery Course For Beginner

Part I: The Importance of Automating File Cleanup

Over time, files such as logs, temporary files, cache, and backups can accumulate in your system, consuming valuable disk space and possibly affecting performance. Automating the cleanup of these files is an effective way to ensure that your system remains uncluttered and operates smoothly.

How to Automate File Cleanup in Linux Servers

Here’s why automation matters:

  1. Consistency: Scheduling regular cleanup tasks ensures that they happen consistently and are not forgotten.
  2. Efficiency: Automation saves time and effort that would otherwise be spent on manual cleanup.
  3. Storage Management: Regularly removing unnecessary files helps maintain an optimized storage space, preventing potential issues related to disk space exhaustion.
  4. Compliance: In some cases, automating file retention and deletion can be part of compliance with legal or business policies.

You can skip this note if you are familiar with text editor in Linux

Note: When working with Linux, you’ll often need to edit text files, whether it’s configuration files, scripts, or other text-based data. Several text editors are available in Linux, each with its own features and capabilities. Here’s an overview of some of the popular ones:

1. Nano

  • Usage: Nano is a user-friendly, lightweight text editor often preferred by beginners. It comes with most Linux distributions and provides simple keyboard shortcuts for navigation.
  • Command to Open: nano filename
  • Saving and Exiting: Press CTRL + O to write changes, then Enter to confirm. Press CTRL + X You will notice a pop-up asking you to select Y or N, which implies Yes or No; Press Y and then Press ENTER to exit.

2. Vim

  • Usage: Vim is a highly configurable text editor that’s popular among experienced users. It has different modes (e.g., command mode, insert mode) and can be challenging for new users.
  • Command to Open: vim filename
  • Saving and Exiting: Press Esc to switch to command mode. Type :w to save changes and :q to exit. To save and exit at once, use :wq.

For this guide, we will use Nano as our text editor. It’s straightforward, intuitive, and suitable for users who may be new to text editing in Linux.

The on-screen instructions in Nano make it easy to understand the available commands and how to use them. By focusing on Nano, we hope to make the process of text editing in Linux more accessible to our readers.

Part II: Automating Cleanup of General Files

Automating file cleanup can be done using various tools and scripting languages. A common method is to create a shell script using cron jobs to schedule the execution at regular intervals.

Here’s a general guide to creating a simple script to delete files older than a certain number of days:

  1. Create a Script:
    nano /path/to/
  2. Write the Script:
    find /path/to/directory -type f -mtime +30 -exec rm {} \;
  3. Make the Script Executable:
    chmod +x /path/to/
  4. Schedule the Script with Cron:
    crontab -e

    Then add:

    0 2 * * * /path/to/

This will run the script every day at 2 AM.

You must replace /path/to/ with the actual path to your script

In an era where data is essential, regular backups are a must-have for any server. While tools like Virtualmin, Plesk, Cpanel, and others provide ways to automate backups, these systems can sometimes fail in their cleanup tasks.

Virtualmin, for instance, offers a feature to delete backups after a certain number of days, but users might find that this feature doesn’t always work as expected. As of the time of writing this article, the backup settings in Virtualmin had the option to auto-delete backups, but the function was not reliable.

This can lead to a significant problem. Backups can quickly consume available storage space on a server, leading to potential issues with performance and even the ability to create new backups. Moreover, having a clean and well-managed backup directory ensures that in the event of a disaster, recovery will be as smooth and efficient as possible.

So, how can we tackle this issue?

In this guide, we will look at how to set up custom scripts and cron jobs to automate the process of cleaning up old backups. By taking control of this process, we can ensure that backups are managed according to our precise needs without relying on potentially faulty automated systems. To provide a practical example, we will focus on cleaning up backup files created by Virtualmin on a Debian server. The scripts and methods described here can be adapted to other scenarios, as well.

Part III: Case Study – Automating Backup Cleanup on a Debian Server with Virtualmin

Managing backups is a crucial task for any system administrator. While tools like Virtualmin facilitate scheduling and handling backups, they might not offer automatic deletion of old backups. This lack can lead to old backups occupying significant storage space over time if not manually managed. This blog post will provide a comprehensive, step-by-step guide on how to automate the cleanup of old backups on a Debian server using Virtualmin. The goal is to create a script that checks a specific backup directory daily and removes all but the two most recent backups.

Setup: In this guide, we assume you have a Debian server with Virtualmin installed and scheduled backups. The backups are stored in two locations: one locally in the /var/backup directory, and another on a remote FTP server.

Our task is to create two scripts: one for the local backups and another for the FTP backups. These scripts will reside in the /var/scripts directory (you can choose another location if preferred).

Step 1: Create the Scripts Directory

Start by creating the scripts directory. The mkdir command is used to create a new directory:

mkdir /var/scripts

Navigate to the /var/scripts directory with the cd command:

cd /var/scripts

Step 2: Create the Local Cleanup Script

Next, we’ll create a shell script that checks the /var/backup directory daily, removing any backup files older than two days.

Use nano or your preferred text editor to create and edit the script file:

nano /var/scripts/

In the editor, enter the following script:


# Specify the backup directory

# Find and delete files in the backup directory older than 2 days
find $BACKUP_DIR -type f -mtime +2 -exec rm {} \;

Here, #!/bin/bash is used to tell the system that this is a Bash script.

BACKUP_DIR="/var/backup" sets the variable BACKUP_DIR to the path of the backup directory.

find $BACKUP_DIR -type f -mtime +2 -exec rm {} \; is a find command that looks for files (-type f) in the BACKUP_DIR that were modified more than two days ago (-mtime +2). For each file found, it executes (-exec) the rm command to remove the file.

Save and exit the editor (in nano, press Ctrl+X, then Y to confirm saving the changes, then Enter to confirm the filename).

Now, before we proceed, let’s test our script to make sure it works as expected. First, navigate to your /var/backup directory:

touch test1
touch test2
touch test3

Manually adjust the timestamps of these files to simulate backups from different days using the touch -d command. For instance, to set test1 as being modified 3 days ago, use:

touch -d "3 days ago" test1

Do the same for the rest of the files, i.e. test2 and test3.

For the scripts to run, they need to be marked as executable. To do this, use the chmod command:

chmod +x /var/scripts/

Now run the cleanup script:


If the script works as expected, it should delete test1 since it’s more than two days old. Remember to remove the other test files before proceeding.

You can see the list of files using ls command, first move to the directory first using cd /var/scripts Then when you reach the directory, use the command ls . It will list the number of files in the directory you just moved to. As soon as you confirm that test1 file has been deleted, then we can set up Cron to automate the deletion instead of you running /var/scripts/
 all the time.

Before we get to using cron to schedule the task, what if you also want to automate the deletion of this backup in your ftp attached to your normal local backup? The process is similar, just minor difference, so let’s have a look

Step 3: Create the FTP Cleanup Script

Next, we’ll create a similar script for the FTP backups. This script connects to the FTP server, navigates to the backup directory, and removes files older than two days.

Create and edit the new script file:

nano /var/scripts/

In the opened editor, enter the following script, replacing FTP_SERVER, FTP_USERNAME, FTP_PASSWORD, and FTP_BACKUP_DIR with your FTP server’s details:

nano /var/scripts/

# Specify FTP credentials and backup directory

# Log in to the FTP server and delete files older than 2 days
ftp -n -i $FTP_SERVER <<EOF
mdelete *

Here, ftp -n -i $FTP_SERVER <<EOF starts a FTP session to the server specified by FTP_SERVER, with -n restricting automatic login and -i turning off interactive prompting.

user $FTP_USERNAME $FTP_PASSWORD sends the username and password for logging into the FTP server.

cd $FTP_BACKUP_DIR changes the working directory on the FTP server to the backup directory.

prompt turns off interactive prompting during multiple file transfers.

mdelete * deletes all files in the current directory on the FTP server.

quit ends the FTP session.

EOF marks the end of the input for the FTP session.

Save and exit the editor.

Step 4: Make the Scripts Executable

For the scripts to run, they need to be marked as executable. To do this, use the chmod command:

chmod +x /var/scripts/

The chmod +x command changes the permissions of the file to be executable.

Step 5: Set Up Cron Jobs

Finally, we’ll create cron jobs to run the scripts automatically every day at 5 AM and 5:30 AM respectively. Cron is a time-based job scheduler in Unix-like operating systems. We use it to schedule our scripts to run automatically.

To edit the crontab file, use the following command:

crontab -e

In the opened editor, add the following lines at the end:

0 5 * * * /var/scripts/
30 5 * * * /var/scripts/

In these cron job entries, 0 5 * * * and 30 5 * * * specify the job schedule. The five fields represent (in order) minute (0-59), hour (0-23, 0 = midnight), day of the month (1-31), month (1-12), and day of the week (0-7, 0 and 7 = Sunday). * means “any.” So, 0 5 * * * means “at 5:00 AM every day,” and 30 5 * * * means “at 5:30 AM every day.”

Save and exit the editor. The changes take effect immediately.


Congratulations! You’ve now automated the cleanup of old backups on your Debian server. The scripts you’ve created will run every day at 5 AM, removing any backup files older than two days. This process saves your storage space and eliminates the need for manual backup cleanup. Remember to periodically check your cron jobs and scripts to ensure they continue to meet your evolving needs. Automating file cleanup is an essential aspect of system maintenance in Linux. By using shell scripts and cron jobs, we can automate these tasks, ensuring a clean and efficient system. The detailed case study on automating backup cleanup on a Debian server illustrates the versatility of Linux tools in handling various file management tasks. By adapting these principles, you can tailor file cleanup automation to meet the specific needs and structures of your system. Happy system administrating!

Similar Posts