Comparando arquivos por data

Publicado por Guinux (última atualização em 31/05/2013)

[ Hits: 6.562 ]

Homepage: www.software.inf.br

Download data.sh




Depois de muito procurar, e não encontrar, resolvi desenvolver um script que recebe dois arquivos e retorna qual é o mais recente.

Espero que seja útil.
Abraços.

  



Esconder código-fonte

#!/bin/bash
#
# data.sh -
#
# Site      : http://www.software.inf.br
# Autor     : Guilherme Giuliani <guilherme@software.inf.br>
# Manutenção: Guilherme Giuliani <guilherme@software.inf.br>
#
#  -------------------------------------------------------------------------
#   Este programa recebe dois arquivos e retorna qual mais atual
#  -------------------------------------------------------------------------
#
#
# Histórico:
#
#    v1.0 2013-05-29, Guilherme Giuliani:
#       - Versão inicial do programa
#
#
# Ex. de Uso: $ ./data.sh arq1 arq2
# Licença: GPL.
#

#0=IGUAL #1=RECENTE #2=ANTIGO

DD1=`date -r $1 +%d`; MM1=`date -r $1 +%m`; AA1=`date -r $1 +%Y`; H1=`date -r $1 +%H`; M1=`date -r $1 +%M`; S1=`date -r $1 +%S`;
DD2=`date -r $2 +%d`; MM2=`date -r $2 +%m`; AA2=`date -r $2 +%Y`; H2=`date -r $2 +%H`; M2=`date -r $2 +%M`; S2=`date -r $2 +%S`;

        if [[ "AA1" -gt "AA2" ]]; then status="1"; elif [[ "AA1" -lt "AA2" ]]; then status="2"; elif [[ "AA1" -eq "AA2" ]]; then
        if [[ "MM1" -gt "MM2" ]]; then status="1"; elif [[ "MM1" -lt "MM2" ]]; then status="2"; elif [[ "MM1" -eq "MM2" ]]; then
        if [[ "DD1" -gt "DD2" ]]; then status="1"; elif [[ "DD1" -lt "DD2" ]]; then status="2"; elif [[ "DD1" -eq "DD2" ]]; then
        if [[ "H1" -gt "H2" ]]; then status="1"; elif [[ "H1" -lt "H2" ]]; then status="2"; elif [[ "H1" -eq "H2" ]]; then
        if [[ "M1" -gt "M2" ]]; then status="1"; elif [[ "M1" -lt "M2" ]]; then status="2"; elif [[ "M1" -eq "M2" ]]; then
        if [[ "S1" -gt "S2" ]]; then status="1"; elif [[ "S1" -lt "S2" ]]; then status="2"; elif [[ "S1" -eq "S2" ]]; then status="0";
        fi fi fi fi fi fi

echo $status

Scripts recomendados

Plugin BACULA

Script de Backup para FITA DAT usando "tar"

Intalação do Thunderbird - Debian

Monitorar status de transferência das interfaces de rede

Instalação completa de servidor de e-mail


  

Comentários
[1] Comentário enviado por itamarnet em 01/06/2013 - 16:14h

Ao invés de usar tantas variáveis poderia ser mais direto:

[ $(date -r $1 +%Y%m%d%H%M%S) -gt $(date -r $2 +%Y%m%d%H%M%S) ] && status=1 || status=2
[ $(date -r $1 +%Y%m%d%H%M%S) -eq $(date -r $2 +%Y%m%d%H%M%S) ] && status=0

É apenas uma sugestão.

[2] Comentário enviado por fabioeduardo em 29/10/2013 - 11:59h

Existe uma opção de comparação do test para isso:

[ arquivoNovo.txt -nt arquivoAntigo.txt ] && echo "O arquivo arquivoNovo.txt é mais recente"

Caso o primeiro arquivo seja mais recente será impresso na tela a frase do echo.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts