Alexander D
Alexander D

Reputation: 101

Want to use a bash for loop to grab descending months

We have a system that would have a cron job that deletes files up to two months ago. I'm trying to write a script to automate this, but I'm fairly new to bash scripting and was wondering if anyone would be able to help. Our files are in %m%Y format and I would be moving them to another directory and then deleting that directory. So for instance since we are in August (082020), I want to move all files up to June (062020) starting this year in Jan (012020).

Here is my script so far, I am basically just trying to print 012020-062020, can anyone let me know if I am on the right track?

#!/bin/bash

MONTHYEAR=$(date +%m%Y)
DELUPTO=$(expr $(date +%m%Y) - 20000)
CURRENTYEAR=$(date +%Y)


for (( i=$DELUPTO; i>=01 + $CURRENTYEAR; $(expr $i - 10000) ))
do
    echo "$i"
done

Upvotes: 0

Views: 48

Answers (2)

Mike Q
Mike Q

Reputation: 7337

You know the month and year, extract those values and then turn it into a stamp, but you will need to insert a day value so I would make it say the 1st:

Example of converting timestamps:

# date -d "8/1/2020" +"%s"
1596254400

# date -d @1596254400 +"%b %d %Y %H:%M:%S"
Aug 01 2020 00:00:00

Then create a time stamp of now minutes X days:

date +%s -d "60 days ago"

Once you have common values to compare, Then compare them and if less than 60 days delete Pseudo code:

del_date=$(date +%s -d "60 days ago")
for each file in directory:
    #get month and day from file name here, then
    file_date=$(date -d "${fmonth}/1/${fyear}" +"%s")
    if [[ $file_date -lt $del_date ]] ;then
      echo "Older than 60 days by name"
    fi
done

Note: It would probably be better to delete files by checking their ages in the system using stat command opposed to reading the details of file name.

Upvotes: 1

Walter A
Walter A

Reputation: 20022

You should loop from the format yyyydd, so start with

for (( i=202006; i>=202001; i-- )); do
     echo "${i:4:2}${i:0:4}"
done

It is up to you how you want to achieve this:

yearmonth=$(date +%Y%m)

or

MONTHYEAR=$(date +%m%Y)
yearmonth=${MONTHYEAR:2:4}${MONTHYEAR:0:2}

Upvotes: 1

Related Questions