Verificar a validade da data e gerar intervalo de datas é difícil e propenso a erros usando o script bash. A melhor opção seria usar python
ou perl
ou qualquer outra linguagem de script de nível mais alto que possa fazer verificações em profundidade. Eu atualizei o script para que ele possa excluir arquivos dentro de um intervalo de datas e excluir o intervalo de datas.
As opções serão como
Para excluir arquivos dentro do intervalo
./dfile.py --from 20140929 --to 20141001 --range
Para excluir arquivos fora do intervalo
./dfile.py --from 20140929 --to 20141001 --out-range
Este programa também gera uma mensagem de ajuda útil, pois os argumentos são dados incorretamente.
#!/usr/bin/env python3
import os
import sys
import argparse
import datetime
parser = argparse.ArgumentParser()
parser.add_argument('--from', dest="fromd", type=str, required=True, help="From date")
parser.add_argument('--to', dest="tod", type=str, required=True, help="To date")
parser.add_argument('--range', dest='drange', action='store_true', help="Delete files between the given date")
parser.add_argument('--out-range', dest="orange", action='store_true', help="Delete files apart form the given date")
args = parser.parse_args()
if args.drange and args.orange:
print('Enter either --range or --out-range option')
sys.exit(1)
elif not (args.drange or args.orange):
print('You must select either --range or --out-range option')
sys.exit(1)
from_date = args.fromd
to_date = args.tod
path='/tmp/tmp.54JUy4ZP6x/'
try:
from_date = datetime.datetime.strptime(from_date, '%Y%m%d').date()
to_date = datetime.datetime.strptime(to_date, '%Y%m%d').date()
except ValueError:
print('Check if the date has been given in YYYYMMDD format')
sys.exit(1)
files = [ x for x in os.listdir(path) if x.endswith('.txt') ]
for file in files:
file_date = datetime.datetime.strptime(file[17:25], '%Y%m%d').date()
if args.orange:
# Delete files out of date range
if not from_date < file_date < to_date:
print('Deleting file {}'.format(file))
os.remove(path + '/' + file)
else:
# Delete files within date range
if from_date < file_date < to_date:
print('Deleting file {}'.format(file))
os.remove(path + '/' + file)
Aqui todos os parâmetros são configuráveis, exceto que o path
precisa ser alterado no programa.
Espero que ajude você.