Хотите использовать bash для l oop, чтобы отсчитывать месяцы по убыванию - PullRequest
0 голосов
/ 04 августа 2020

У нас есть система, которая выполняет задание cron, которое удаляет файлы на срок до двух месяцев go. Я пытаюсь написать сценарий для автоматизации этого, но я новичок в написании сценариев bash и мне было интересно, сможет ли кто-нибудь помочь. Наши файлы имеют формат % m% Y , и я бы переместил их в другой каталог, а затем удалил бы этот каталог. Так, например, поскольку мы находимся в августе (082020), я хочу переместить все файлы до июня (062020), начиная с января этого года (012020).

Вот мой сценарий на данный момент, я в основном просто пытаюсь напечатать 012020-062020, может ли кто-нибудь сообщить мне, на правильном ли я пути?

#!/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

Ответы [ 2 ]

1 голос
/ 05 августа 2020

Вы знаете месяц и год, извлеките эти значения, а затем превратите их в штамп, но вам нужно будет вставить значение дня, поэтому я бы сказал, что это первое:

Пример преобразования временных меток:

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

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

Затем создайте отметку времени в минутах X дней:

date +%s -d "60 days ago"

После того, как у вас есть общие значения для сравнения, затем сравните их и, если меньше 60 дней, удалите псевдокод:

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

Примечание. Вероятно, было бы лучше удалять файлы, проверяя их возраст в системе с помощью команды stat, а не чтения деталей имени файла.

1 голос
/ 05 августа 2020

Вы должны l oop из формата yyyydd, поэтому начните с

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

Как вы хотите этого добиться - решать вам:

yearmonth=$(date +%Y%m)

или

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