Giter VIP home page Giter VIP logo

old-files-delete's Introduction

Old-Files-Delete

Old-Files-Delete (old_files_delete.sh) is a bash script to recursively delete files older than (n) number of days.

run_old_files_delete.sh is a related script intended to be used for making unattended script calls into old_files_delete.sh (e.g., running cron jobs).

Old-Files-Delete uses a Bash shell template (BaT) called A-Bash-Template designed to make script development and command line argument management more robust, easier to implement, and easier to maintain. Here are a few of those features:

  • Dependencies checker: a routine that checks all external program dependencies (e.g., jq)
  • Arguments and script details--such as script description and syntax--are stored in the JSON file format (i.e., config.json)
  • JSON queries (using jq) handled through wrapper functions
  • A script banner function automates banner generation, reading directly from config.json
  • Command line arguments are parsed and tested for completeness using both short and long-format argument syntax (e.g., -f|--font)
  • Optional command line arguments are permissible and managed through the JSON configuration file
  • Template functions organized into libraries (see the Bash-Lib project for details) to minimize code footprint in the main script

For more details about using a bash template, check out the BaT sources here.

Requirements

  • An operational Bash environment (Bash 5.1.8 used during development)
  • One additional external program:
    • jq, for parsing the config.json file

While this package was initially written and tested under Linux (Ubuntu 21.10), there should be no reason why this won't work under other shells or Unix-like operating systems that support the gsettings application.

Basic Usage

Old-Files-Delete is run through a command line interface, so all of the command options are made available there.

Here's the default response when running old_files_delete.sh with no arguments:

$ ./old_files_delete.sh

|
|  A bash script to recursively delete files older than (n) days
|    1.2.0
|
|  Usage:
|    old_files_delete.sh -d directory -n days_ago
|
|  -d, --directory           file directory
|  -n, --days_ago            last modified (n) or more days ago
|  -f, --file_pattern_match  OPTIONAL: file pattern to match ('*.jpg')
|

Error: directory argument (-d|--directory) missing.
Error: days ago argument (-n|--days_ago) missing.

In this example, the program responds by indicating that the required script arguments must be set before proper operation.

When arguments are correctly passed, the script provides feedback on the success or failure of the script actions:

$ ./old_files_delete.sh -d ~/desktop -n 6

|
|  A bash script to recursively delete files older than (n) days
|    1.2.0
|
|  Usage:
|    old_files_delete.sh -d directory -n days_ago
|
|  -d, --directory           file directory
|  -n, --days_ago            last modified (n) or more days ago
|  -f, --file_pattern_match  OPTIONAL: file pattern to match ('*.jpg')
|

Deleting old files...

Success.

Also, using the optional -f flag, Old-Files-Delete can be run to filter filenames, so file deletes can be specifically pattern matched (globbing). For example, if the use case is to delete files in /home/user/pics older than 10 days, but only to delete jpg images files, then the following script would be run:

$ ./old_files_delete.sh -d ~/pics -n 10 -f '*.jpg'

|
|  A bash script to recursively delete files older than (n) days
|    1.2.0
|
|  Usage:
|    old_files_delete.sh -d directory -n days_ago
|
|  -d, --directory           file directory
|  -n, --days_ago            last modified (n) or more days ago
|  -f, --file_pattern_match  OPTIONAL: file pattern to match ('*.jpg')
|

Deleting old files...

Success.

Automation with Cron

Perhaps the most powerful use case for Old-Files-Delete is the automated, regular execution of this script using a job scheduler such as cron. Old-Files-Delete can be installed, a cron job created and saved, and then promptly forgotten: cron will periodically run the script, removing old files as they go out of date.

The example below represents my own cron job set to run nightly at 00:15 on my Raspberry Pi devices configured as surveillance cameras running the Distributed-Motion-Surveillance project:

# run periodic file delete on motion image files
15 0 * * * /bin/bash /home/pi/dev/old-files-delete/run_old_files_delete.sh

As configured, I no longer have to worry about motion-captured image files (jpg and avi files) getting generated over time, and eventually consuming available disk space on my IoT device.

IMPORTANT: This Project Uses Git Submodules

This project uses Git submodule project(s) (located in the bash-lib folder) to keep this project up-to-date without manual intervention.

Be sure to clone this project with the --recursive switch (git clone --recursive https://github.com/richbl/this_project) so any submodule project(s) will be automatically cloned as well. If you clone into this project without this switch, you'll likely see empty submodule project folders (depending on your version of Git).

old-files-delete's People

Contributors

richbl avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

old-files-delete's Issues

Can't clone submodules

When trying to clone the repo I get the following error(s). How can I prevent this?
When I don't use --recursive it does not give any errors (but then the script doesn't work obviously).

Cloning into 'old-files-delete'...
remote: Enumerating objects: 65, done.
remote: Counting objects: 100% (20/20), done.
remote: Compressing objects: 100% (11/11), done.
remote: Total 65 (delta 8), reused 15 (delta 7), pack-reused 45
Unpacking objects: 100% (65/65), done.
Submodule 'bash-lib' ([email protected]:richbl/bash-lib.git) registered for path 'bash-lib'
Cloning into '/home/administrator/old-files-delete/bash-lib'...
The authenticity of host 'github.com (140.82.121.3)' can't be established.
ECDSA key fingerprint is SHA256:p2QAMXNIC1TJYWeIOttrVc98/R1BUFWu3/LiyKgUfQM.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'github.com,140.82.121.3' (ECDSA) to the list of known hosts.
[email protected]: Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
fatal: clone of '[email protected]:richbl/bash-lib.git' into submodule path '/home/administrator/old-files-delete/bash-lib' failed
Failed to clone 'bash-lib'. Retry scheduled
Cloning into '/home/administrator/old-files-delete/bash-lib'...
[email protected]: Permission denied (publickey).
fatal: Could not read from remote repository.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.