Selecionar Arquivos pela Data (no nome)

1. Selecionar Arquivos pela Data (no nome)

Marcio
marciorp

(usa Debian)

Enviado em 02/06/2012 - 20:42h

Pessoal,

Tenho que apagar todos os arquivos de um diretório que tenham sido criados a mais de 30 dias, e gravar o nome deles em um log, usando o syslog.
A dificuldade é que tenho que usar como parâmetro de data de criação uma parte do nome do arquivo.
O nome dos arquivos está nesse padrão: <STRING DE 15 POS.>_AAAAMMDD-HHMMSS.tif
A ideia que tive foi mais ou menos assim, mais aceito sugestões:

for arquivos in `find /var/spool/out -name '*.tif' -print`; do
if [ <DATA NO NOME DO ARQUIVO TEM MAIS DE 30 DIAS> ]; then
#Gravar nome do arquivo no log
#Apagar arquivo
fi
done


Antes da data, é fixo uma string de 15 posições.
AAAA = Ano com 4 dígitos
MM = Mês com 2 dígitos
DD = Dia com 2 dígitos
HH = Hora com 2 dígitos
MM = Minuto com 2 dígitos
SS = Segundo com 2 dígitos

Tenho que usar a data que está no nome do arquivo.

A minha dificuldade está em pegar uma parte do nome, converter para data e verificar se tem mais de 30 dias da data atual.

[...]´s

Marcio.


  


2. Re: Selecionar Arquivos pela Data (no nome)

Khal
valtingojer

(usa openSUSE)

Enviado em 02/06/2012 - 22:37h

Rapaz eu programo em PHP então a sintax provavelmente não está exatamente certa mas tente algo como...

nomeDoArquivo = arquivos
data = expr substr nomeDoArquivo 15 29

se não me engano o 'expr substr nomeDoArquivo 15 29' vai te retornar a posição entre 15 e 29 da sua string que pelo que entendi é onde se encontra os valores da data


3. Re: Selecionar Arquivos pela Data (no nome)

euteste da silva
foxbit3r

(usa Solaris)

Enviado em 03/06/2012 - 00:30h

Colega,
Por que vc não usa as opções do find?
Para apagar arquivos criados com mais de 30 dias.

find /var/spool/out -type f -mtime +30 -exec rm -f {} \;


4. Re: Selecionar Arquivos pela Data (no nome)

Marcio
marciorp

(usa Debian)

Enviado em 03/06/2012 - 12:32h

valtingojer escreveu:

Rapaz eu programo em PHP então a sintax provavelmente não está exatamente certa mas tente algo como...

nomeDoArquivo = arquivos
data = expr substr nomeDoArquivo 15 29

se não me engano o 'expr substr nomeDoArquivo 15 29' vai te retornar a posição entre 15 e 29 da sua string que pelo que entendi é onde se encontra os valores da data


Opá amigo, obrigado pela ajuda!
Vou testar e posto o resultado. Sou muito fraco em shell, então vou ter que estudar esse código que me passou.

[...]´s

Marcio.


5. Re: Selecionar Arquivos pela Data (no nome)

Marcio
marciorp

(usa Debian)

Enviado em 03/06/2012 - 12:36h

foxbit3r escreveu:

Colega,
Por que vc não usa as opções do find?
Para apagar arquivos criados com mais de 30 dias.

find /var/spool/out -type f -mtime +30 -exec rm -f {} \;


Obrigado pela dica amigo, mais já tinha visto essa opção.
A questão, como disse na primeira msg, é que tenho que pegar a data no nome do arquivo. Não posso usar como referência a data de criação do arquivo nas propriedades dele, pois os arquivos são manipulados por usuários, e a data de criação e ultima alteração não são confiáveis.


[...]´s

Marcio.


6. Re: Selecionar Arquivos pela Data (no nome)

Raimundo Alves Portela
rai3mb

(usa Outra)

Enviado em 05/06/2012 - 01:42h

Ai vai


#!/bin/bash

DATA_ALVO=$(date -d '- 30 days' '+%Y%m%d') # - 30 dias após a data atual

for ARQUIVO in $(find /var/spool/out -name '*.tif')
do
NOME_ARQUIVO=${ARQUIVO##*/} # filtra o nome do arquivo sem o caminho
DATA_ARQUIVO=${NOME_ARQUIVO:14:8} # pega a data do nome do arquivo, posicao 15(14) 8 digitos
# se a data_alvo for maior ou igual a data do arquivo
if [ $DATA_ALVO -ge $DATA_ARQUIVO ]
then
echo "Grava $ARQUIVO no log"
echo "apagar arquivo $ARQUIVO"
fi
done


Espero que ajude, abraços!






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts