Search code examples
linuxbashfilecrontar

Linux project: bash script to archive and remove files


I've been set a mini project to run a bash script to archive and remove files that are older than 'x' number of days. The file will be archived in the /nfs/archive directory and they need to be compressed (TAR) or removed... e.g. '/test.sh 15' would remove files older than 15 days. Moreover, I also need to input some validation checking before removing files...

My code so far:

> #!/bin/bash 
> 
> #ProjectEssentials:
> 
> # TAR: allows you to back up files
> # cronjob: schedule taks 
> # command: find . -mtime +('x') -exec rm {} \; this will remove files older than 'x' number of days 
> 
> find /Users/alimohamed/downloads/nfs/CAMERA -type f -name '*.mov'
> -mtime +10 -exec mv {} /Users/limohamed/downloads/nfs/archive/ \;
> 
> # TAR: This will allow for the compression
> 
> tar -cvzf doc.tar.gz /Users/alimohamed/downloads/nfs/archive/
> 
> # Backup before removing files 'cp filename{,.bak}'?  find /Users/alimohamed/downloads/nfs/CAMERA -type f name '*.mov' -mtime +30
> -exec rm {} \; ~

Any help would much appreciated!!


Solution

  • Modified script to fix few typos. Note backup file will have a YYYY-MM-DD, to allow for multiple backups (limited to one backup per day).Using TOP to make script generic - work on any account.

    X=15      # Number of days
    
              # Move old files (>=X days) to archive, via work folder
    TOP=~/downloads/nfs
    mkdir -p "$TOP/work"
    find $TOP/CAMERA -type f -name '*.mov' -mtime +"$X" -exec mv {} "$WORK/work" \;
    
           # Create daily backup (note YYYY-MM-DD in file name from work folder
    tar -cvzf $TOP/archive/doc.$(date +%Y-%m-%d).tar.gz -C "$TOP/work" .
    
           # Remove all files that were backed-up, If needed
    find "$TOP/work" -type f -name '*.mov' -exec rm {} \; ~